我正在尝试获取对列表的所有元素进行网络请求的函数:
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()
两次,我相信可以可以在不等待响应的情况下同时对所有元素进行操作,从而使代码以相同的速度运行,而不管元素的数量如何?
答案 0 :(得分:1)
PATH
这非常适合我的用例。由于我使用的API的局限性,我还不得不将元素分成较小的组,而SO中的代码如下:
getopt()