首页 > 解决方案 > 在 Python 中并行化列表推导

问题描述

someList = [x for x in someList if not isOlderThanXDays(x, XDays, DtToday)]

我有这一行,函数 isOlderThanXDays 进行了一些 API 调用,导致它需要一段时间。我想在 python 中使用多/并行处理来执行此操作。列表完成的顺序无关紧要(我认为是异步的)

函数 isOlderThanXDays 本质上返回一个布尔值,所有比使用 List Comprehension 保存在新列表中的内容更新的内容。

编辑:函数参数:所以 XDays 是供用户传入的,比如说 60 天。DtToday 是今天的日期(日期时间对象)。然后我进行 API 调用以查看文件修改日期的元数据,如果它较旧则返回,否则返回 true。

我正在寻找类似于以下问题的内容。不同的是这个问题对于每个列表输入都有一个输出,而我的就像根据所用函数的布尔值过滤列表,所以我不知道如何在我的场景中应用它

如何在 Python 中并行化列表理解计算?

标签: pythonpython-3.xmultithreadingconcurrencylist-comprehension

解决方案


This should run all of your checks in parallel, and then filter out the ones that failed the check.

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]

推荐阅读