2026-10-21 16:24:00
以下通过一个具体示例说明如何使用asyncio实现并发,并对比同步执行及常见错误场景。
1. 正确实现并发的示例import timeimport asyncioasync def function_1(): print("Function 1 started.") while True: print("1", int(time.time())) await asyncio.sleep(3) # 模拟I/O操作,释放控制权async def function_2(): print("Function 2 started.") while True: print("2", int(time.time())) await asyncio.sleep(2) # 模拟I/O操作,释放控制权if __name__ == "__main__": loop = asyncio.get_event_loop() tasks = [loop.create_task(function_1()), loop.create_task(function_2())] loop.run_until_complete(asyncio.gather(*tasks)) # 并发执行关键点说明:function_1等待3秒时,事件循环切换到function_2执行2秒,交替进行。
输出中1的时间间隔为3秒,2的时间间隔为2秒,证明两者交替执行。
若移除asyncio相关代码:
def function_1(): print("Task 1 started.") while True: print("1", int(time.time())) time.sleep(3) # 阻塞线程def function_2(): print("Task 2 started.") while True: print("2", int(time.time())) time.sleep(2)if __name__ == "__main__": function_1() # 阻塞,function_2永远无法执行 function_2()结果分析:协程通过await主动释放控制权,事件循环利用这一机制切换任务。
单线程内实现“并发”效果,避免线程切换开销。
asyncio是协作式多任务(任务主动让出控制权),而多线程是抢占式(由操作系统调度)。
通过以上示例和对比,可以清晰理解asyncio实现并发的关键步骤及常见误区。