首页 > 解决方案 > 如何并行化/多线程多个生成器初始化?

问题描述

我有多个生成器,需要一些时间进行初始化,然后每个生成器才能产生第一个结果。在我下面的代码示例中是一个示例。每个生成器需要 5 秒进行初始化。所以总时间是10s。有没有办法初始化g1g2并行?这样总的初始化时间只有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)]

标签: pythonmultithreadingparallel-processinggenerator

解决方案


我找到了一个异步解决方案:

import asyncio
from random import random
from aiostream import stream

async def my_generator():
    await asyncio.sleep(5)
    for i in range(5):
        yield random()

async def main():
    combine = stream.zip(my_generator(), my_generator())
    x = []
    async with combine.stream() as streamer:
        async for item in streamer:
            x.append(item)
    print(x)

asyncio.run(main())

推荐阅读