Python 在后台运行返回列表的函数
我正在尝试获取对列表中的所有元素进行web请求的函数:Python 在后台运行返回列表的函数,python,python-multiprocessing,python-pool,Python,Python Multiprocessing,Python Pool,我正在尝试获取对列表中的所有元素进行web请求的函数: import myClass def getForAll(elements): myList = [] for element in elements: myList.append([element] + myClass.doThing(element)) return myList 我尝试了以下方法,但总是超时: import myClass from multiprocessi
import myClass
def getForAll(elements):
myList = []
for element in elements:
myList.append([element] + myClass.doThing(element))
return myList
我尝试了以下方法,但总是超时:
import myClass
from multiprocessing import Pool
def getForAll(elements):
pool = Pool()
queries = []
for element in elements:
queries.append(pool.apply_async(myClass.doThing, element))
myList = []
for query in queries:
myList.append(query.get(timeout=10))
return myList
但是,这不是时间问题,因为删除超时只会导致它永远运行
queries.append(pool.apply_async(myClass.doThing, [element]))
也没什么不同
澄清一下:我使用字符串列表调用getForAll()
,函数doThing()
返回字符串列表。我不需要订单保持不变,但如果可能的话,那就太好了。另外,我不需要将“CPU工作”分离到几个核心上,我只是不想每个元素等待大约一秒钟,因为doThing
调用requests.get()
两次,我相信这可以同时对所有元素执行,而无需等待响应,让代码以相同的速度运行,而不考虑元素的数量
import myClass
from multiprocessing import Pool
def getForAll(elements):
pool = Pool()
return pool.map(myClass.doThing, elements)
这非常适合我的用例。由于我使用的API的局限性,我还不得不将我的元素分成更小的组,下面的代码来自:
f = lambda A, n=5: [A[i:i + n] for i in range(0, len(A), n)]
queries = f(elements)