首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中并行化列表理解

在Python中并行化列表理解
EN

Stack Overflow用户
提问于 2019-11-21 15:14:13
回答 2查看 229关注 0票数 0

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?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-21 17:03:59

您可以使用ThreadPool:

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2019-11-21 16:23:39

这应该并行运行所有的检查,然后过滤掉未通过检查的检查。

代码语言:javascript
运行
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58969213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档