使用asyncio.Semaphore设置并发限制,控制异步任务的数量。
示例代码:
import asyncio
async def async_task(i):
print(f"Start task {i}.")
await asyncio.sleep(i)
print(f"End task {i}.")
async def main():
# 设置异步任务最大并发数为2
semaphore = asyncio.Semaphore(2)
# 创建10个异步任务
tasks = [asyncio.create_task(sync_task(i, semaphore)) for i in range(10)]
# 等待所有异步任务完成
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(main())
在上述示例代码中,我们设置了异步任务的最大并发数为2,即同一时间内最多只能同时执行2个异步任务。这样可以避免因过多的异步任务导致程序崩溃或者出现其他错误。使用Semaphore可以很方便地实现并发限制,具体实现方式为在异步任务中使用semaphore.acquire()获取信号量,并在异步任务完成后使用semaphore.release()释放信号量。