python - 可以同时运行 2 个 for 循环,一个接一个地循环吗?
问题描述
我只是想知道,您将如何创建一个循环,使每次迭代一个接一个地发生?我知道多线程是一件事,而且我很熟悉。我无法弄清楚的一件事是如何一个接一个地运行一个循环。
例如,假设我有 2 个功能:
def loop_a():
while True:
time.sleep(1)
print("a")
def loop_b():
while True:
print("b")
ababababababababa
即使time.sleep(1)
第一个函数中有现在,我如何得到输出?
我正在使用mpi4py,并且想知道是否有任何方法可以使用这个库来做到这一点。我的实际程序需要在函数之间发送消息。否则,使用任何其他 python 库multiprocessing
应该没问题。
有没有办法使用线程来做到这一点?
解决方案
您可以使用协程:
import asyncio
q = asyncio.Queue()
async def loop_a(q):
for i in range(10):
value = await q.get()
print(value)
async def loop_b(q):
for i in range(10):
await q.put("a")
print("b")
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(loop_a(q), loop_b(q)))
这里有活生生的例子
唯一的想法是,除非您以某种方式同步它们,否则无法保证执行顺序。
推荐阅读
- ruby-on-rails - 创建一个按钮以删除 Rails 中的特定记录
- c# - 当鼠标悬停在非选定项目上时,WPF Combobox 框保持关闭
- python - Django 交换非空字段 - 由于 unique_together 而获得 IntegrityError
- azure - Azure API 管理:将登录事件存储到表存储
- javascript - Puppeteer:setDefaultNavigationTimeout 为 0 仍然超时
- typescript - TypeScript 中的强类型剩余参数
- html - 居中的内容是从具有固定高度和滚动条的父级中剪切出来的
- c - wscanf(L"%[^\n]") 正在输入垃圾
- curl - 当`curl -o`时`gzip:stdin:不是gzip格式`
- cs50 - CS50 金融指数。无法让数据出现在 HTML 表格中