结果排列在多线程进程中



假设我有一个代码,使用多处理会返回一个包含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()

我怀疑用多处理取代多线程将解决这个问题,但我担心这不会节省时间。

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

问题是,您只为一个操作运行一个池,但运行了200k次,但您希望池运行超过200k次操作。您需要将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

相关内容

  • 没有找到相关文章

最新更新