首页 > 解决方案 > 可以同时运行 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应该没问题。

有没有办法使用线程来做到这一点?

标签: pythonmultithreadingloopsmpitheory

解决方案


您可以使用协程:

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)))

这里有活生生的例子

唯一的想法是,除非您以某种方式同步它们,否则无法保证执行顺序。


推荐阅读