在后台运行函数返回列表

时间:2019-03-06 15:20:47

标签: python python-multiprocessing python-pool

我正在尝试获取对列表的所有元素进行网络请求的函数:

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()两次,我相信可以可以在不等待响应的情况下同时对所有元素进行操作,从而使代码以相同的速度运行,而不管元素的数量如何?

1 个答案:

答案 0 :(得分:1)

PATH

这非常适合我的用例。由于我使用的API的局限性,我还不得不将元素分成较小的组,而SO中的代码如下:

getopt()