Skip to main content
 首页 » 编程设计

python之在 Python 中制作异步 for 循环

2025年05月04日11fff_TT

以下代码输出如下:

1 sec delay, print "1",  
1 sec delay, print "2",  
1 sec delay, print "1",  
1 sec delay, print "2" 

如何修改才能这样运行:

1 sec delay, print "1", print "1", 
1 sec delay, print "2", print "2" 

我希望它运行时 for 循环的两个实例同时开始执行。当每个实例执行时,它们会同时遇到 first() 函数,然后同时遇到 second() 函数,从而按照上述顺序打印。

代码:

import asyncio 
 
async def first(): 
    await asyncio.sleep(1) 
    return "1" 
 
async def second(): 
    await asyncio.sleep(1) 
    return "2" 
 
async def main():      
    for i in range(2): 
      result = await first() 
      print(result) 
      result2 = await second() 
      print(result2) 
 
 
loop = asyncio.get_event_loop() 
loop.run_until_complete(main()) 

请您参考如下方法:

查看所需的输出,目标似乎是保持单个迭代不变 - 即依次运行 first 和 second - 但执行两个循环迭代并行。

假设你只想修改main(),可以这样实现:

async def main(): 
    async def one_iteration(): 
        result = await first() 
        print(result) 
        result2 = await second() 
        print(result2) 
    coros = [one_iteration() for _ in range(2)] 
    await asyncio.gather(*coros) 

上面的代码不是按顺序迭代,而是为每个迭代任务创建一个协程,并使用 asyncio.gather并行执行所有迭代。

请注意,简单地创建协程并不会开始执行它,因此大量的 coros 不会阻塞事件循环。