python - 在 Python 中并行化列表推导
问题描述
someList = [x for x in someList if not isOlderThanXDays(x, XDays, DtToday)]
我有这一行,函数 isOlderThanXDays 进行了一些 API 调用,导致它需要一段时间。我想在 python 中使用多/并行处理来执行此操作。列表完成的顺序无关紧要(我认为是异步的)
函数 isOlderThanXDays 本质上返回一个布尔值,所有比使用 List Comprehension 保存在新列表中的内容更新的内容。
编辑:函数参数:所以 XDays 是供用户传入的,比如说 60 天。DtToday 是今天的日期(日期时间对象)。然后我进行 API 调用以查看文件修改日期的元数据,如果它较旧则返回,否则返回 true。
我正在寻找类似于以下问题的内容。不同的是这个问题对于每个列表输入都有一个输出,而我的就像根据所用函数的布尔值过滤列表,所以我不知道如何在我的场景中应用它
解决方案
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]
推荐阅读
- elasticsearch - Opendistro for Elasticsearch - ISM 未触发作业
- python - 使用 PyTorch 耗尽 GPU 内存
- python - 如何仅使用一个 dockerfile 将 Flask API 与 mongo 加入?
- node.js - 在node.js中解密用A128CBC-HS256加密的JWT
- c++ - c++14中vector.reserve()的意外行为?
- java - 如何计算同一类的两个对象?
- javascript - 在 .html Javascript 循环中使用 Django 视图中的字典(SyntaxError - 意外标记:')
- javascript - 失去对 eventListener 的关注
- python - 根据列表值从数据框中删除行
- python - 使用 python-barcode 尝试生成条形码并收到错误消息:AttributeError: 'function' object has no attribute 'get'