gpt4 book ai didi

python - 多处理迭代器,过滤添加到双端队列的内容

转载 作者:行者123 更新时间:2023-11-30 22:04:58 24 4
gpt4 key购买 nike

我正在运行大型比较,但总运行时间的大约 25% 用于在比较完成后清理双端队列。我的代码看起来像这样:

from collections import deque
from multiprocessing import Pool
from _map_workflow import val_comp

if __name__ == '__main__':
pool = Pool()
records = deque(pool.imap_unordered(val_comp, combinations(index_tups,2)))

for _ in range(records.count(None)):
records.remove(None)

比较函数val_comp仅在满足特定条件时返回值,但当没有返回任何内容时,双端队列将加载None。由于我的多处理正在使用 imap 我不确定如何过滤添加到双端队列的内容。

是否有更快/更有效的方法来删除这些None或阻止它们首先添加?

最佳答案

.removean O(N) operation对于deque对象。

因此,总的来说,如果有 M 个 None,则您的行为为 O(M*N)。

这是完全可以避免的。一种简单的方法是使用过滤器:

records = deque(filter(None, pool.imap_unordered(val_comp, combinations(index_tups,2))))

如果您想在拥有记录双端队列后过滤掉它们,您可以执行以下操作:

records = deque(x for x in records if x is not None)

这会创建一个新的双端队列

关于python - 多处理迭代器,过滤添加到双端队列的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53134468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com