在 asyncio 中,多个协程任务可以同时访问和修改全局变量,因此需要特别注意全局变量的保护和同步。以下是一个简单的解决方法,通过 asyncio.Lock 实现对全局变量的互斥访问:
import asyncio
global_counter = 0
counter_lock = asyncio.Lock()
async def worker():
global global_counter, counter_lock
async with counter_lock:
global_counter += 1
await asyncio.sleep(1)
async def main():
tasks = [worker() for i in range(10)]
await asyncio.gather(*tasks)
print(global_counter)
if __name__ == '__main__':
asyncio.run(main())
在上述示例中,使用 async with counter_lock 实现对全局变量的互斥访问,确保多个任务不会同时修改 global_counter 的值。