python - 如何并行化/多线程多个生成器初始化?
问题描述
我有多个生成器,需要一些时间进行初始化,然后每个生成器才能产生第一个结果。在我下面的代码示例中是一个示例。每个生成器需要 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)]
解决方案
我找到了一个异步解决方案:
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())
推荐阅读
- rust - One::one() 与 1 有什么区别
- c# - 如何在代码隐藏中多次将 XAML 资源(带有 ItemsControls 的网格)添加到 FlowDocument
- javascript - React 更改父数组属性
- django - 在 Django 项目停止之前做一些任务
- javascript - 如何从来自 api 的对象创建有效文件?
- r - 重命名列条目,当它是按组的最大值时,会给出不一致的结果
- php - IMAP 检查邮件来自哪个邮件客户端
- php - 在 php 表单中添加输入文本字段并将数据存储在文件中也显示动态表中的文本
- javascript - 如何使用 cy.intercept 存根两个同名请求但返回两个不同的主体?
- c++ - 同步访问两个矩阵