gpt4 book ai didi

python - 多线程进程中的结果排列

转载 作者:太空宇宙 更新时间:2023-11-03 21:31:37 25 4
gpt4 key购买 nike

假设我有一个使用多处理的代码,它返回一个包含 200000 个项目的列表,这些项目是它们自己的列表(在标记为点 1 的代码中)。如果我需要一个仅包含内部项目的列表,我会再次迭代接收到的列表(在标记为点 2 的代码中)。

问题:标记为点 2 的线不能并行工作,因此需要花费宝贵的时间。有没有办法将所有数据直接从函数 cu 写入文档?

def cu(num):
return range(num)

pool = mp.Pool(processes=384)
results = [pool.apply_async(cu, args=(20, )) for ind in range(200000)]
docs = [p.get() for p in results] # point 1
docs = [point for item in docs for point in item] # point 2
pool.close()
pool.join()

我怀疑用多处理代替多线程可以解决这个问题,但恐怕不会节省时间。

注意:这是一个最小的示例。

最佳答案

问题在于,您仅运行一个池进行 20 万次操作,但您希望该池运行超过 20 万次操作。您需要使用map_async ,带有发电机和 itertools.chain.from_iterable :

docs = itertools.chain.from_iterable(
pool.map_async(cu, args=(20 for _ in range(200000)))
)

这个解决方案是惰性的,这意味着您需要使用迭代器来获取值(迭代它),您可以轻松使用:

docs = list(docs)

或者如果您不想存储结果:

for doc in docs:
... #Do your stuff here

关于python - 多线程进程中的结果排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53480691/

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