Python 异步IO信号量和等待任务排序模式
考虑以下代码来管理具有相同异步任务的并发性Python 异步IO信号量和等待任务排序模式,python,python-asyncio,Python,Python Asyncio,考虑以下代码来管理具有相同异步任务的并发性 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 task
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 0 14 1 15 2 16 18
- 问题1。我的任务排序的逻辑是什么
- 问题2。如果我希望以近似的插入顺序处理任务,该怎么办?也就是说,就像在有限并发的队列中工作一样
.wait()
规范检测到
如果在另一台机器上启动脚本,将得到不同的结果。如果您想对任务执行施加命令,您可以在循环中等待它们,或者在协同程序中使用异步IO,例如事件或条件