someList = [x for x in someList if not isOlderThanXDays(x, XDays, DtToday)]
我有下面这行代码,函数isOlderThanXDays进行了一些API调用,这会花费一些时间。我想使用python中的multi/parrellel处理来执行此操作。完成列表的顺序并不重要(我认为是异步的)
函数isOlderThanXDays本质上返回一个布尔值和所有比使用列表理解保存在新列表中的内容更新的内容。
编辑: Params of function:所以XDays是让用户传入的,比如说60天。DtToday是今天的日期(date time对象)。然后,我调用API来查看文件修改日期的metaData,如果是旧的,返回true,否则返回false。
我正在寻找与下面的问题类似的东西。不同的是,这个问题对于每个列表输入都有一个输出,而我的问题就像是根据使用的函数中的布尔值来过滤列表,所以我不知道如何在我的场景中应用它
How to parallelize list-comprehension calculations in Python?
发布于 2019-11-21 09:03:59
您可以使用ThreadPool:
from multiprocessing.pool import ThreadPool # Class which supports an async version of applying functions to arguments
from functools import partial
NUMBER_CALLS_SAME_TIME = 10 # take care to avoid throttling
# Asume that isOlderThanXDays signature is isOlderThanXDays(x, XDays, DtToday)
my_api_call_func = partial(isOlderThanXDays, XDays=XDays, DtToday=DtToday)
pool = ThreadPool(NUMBER_CALLS_SAME_TIME)
responses = pool.map(my_api_call_func, someList)
发布于 2019-11-21 08:23:39
这应该并行运行所有的检查,然后过滤掉未通过检查的检查。
import multiprocessing
try:
cpus = multiprocessing.cpu_count()
except NotImplementedError:
cpus = 2 # arbitrary default
def MyFilterFunction(x):
if not isOlderThanXDays(x, XDays, DtToday):
return x
return None
pool = multiprocessing.Pool(processes=cpus)
parallelized = pool.map(MyFilterFunction, someList)
newList = [x for x in parallelized if x]
https://stackoverflow.com/questions/58969213
复制