【发布时间】:2020-11-24 19:15:19
【问题描述】:
考虑以下代码来管理具有相同异步任务的并发
import asyncio
async def performTask(id):
await asyncio.sleep(1)
print(id)
async def runBatchItem(semaphore, task):
await semaphore.acquire()
await task
semaphore.release()
async def main():
# all tasks
tasks = [performTask(i) for i in range(20)]
# concurrency handler
MAX_CONCURRENT = 3
semaphore = asyncio.Semaphore(value=MAX_CONCURRENT)
stasks = [runBatchItem(semaphore, task) for task in tasks]
await asyncio.wait(stasks)
asyncio.run(main())
无论我多久运行一次,我总是会得到以下输出序列
3 19 4 5 6 7 8 17 9 10 11 12 13 0 14 1 15 2 16 18
- 问题 1. 我的任务排序的逻辑是什么?
- 问题 2. 如果我希望以近似插入顺序处理任务怎么办?即,就像在有限并发的队列中工作一样。
提前致谢!
【问题讨论】:
标签: python python-asyncio