【发布时间】:2021-02-06 22:13:54
【问题描述】:
我有多个生成器,它们需要一些时间进行初始化,然后每个生成器才能产生第一个结果。在我下面的代码示例中是一个示例。每个生成器需要 5 秒进行初始化。所以总时间是10s。
有没有办法初始化g1 和g2 并行?这样总的初始化时间只有5s?
from random import random
from time import sleep
def my_generator():
sleep(5)
for i in range(5):
yield random()
# this is what I want to do in parallel
g1 = my_generator()
g2 = my_generator()
x = [(r1, r2) for r1, r2 in zip(g1, g2)]
【问题讨论】:
-
在那五秒钟内到底发生了什么?您是在等待外部事件还是 URL?您的代码是否处理复杂的计算?生成器是完全独立的,还是它们生成的值取决于其他正在进行的状态?所有这些都会影响答案。
-
@FrankYellin 生成器是独立的。初始化时间长的主要部分是由于大数据导致的数据库请求。计算很复杂
-
听起来像this 可能对你有用。
-
@Darkonaut 非常感谢你,但实际上这并不完全是我所需要的。问题是我必须保留生成器的产量顺序。我必须同时处理
g1和g2的响应。我想如果上面的例子可以并行执行,我的问题就解决了 -
我不确定我是否真的理解你的意思,但你可以尝试使用this 来实现真正的并行。只需注释掉
results.sort()并使用您的示例调用应该是list(parallel_gen(gen_func=my_generator, gen_args_tuples=[()] * 2)])。但是你会在收益期间为 IPC 付出代价。
标签: python multithreading parallel-processing generator