python - 异步信号量和等待任务排序模式
问题描述
考虑以下代码来管理具有相同异步任务的并发性
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. 如果我希望以近似的插入顺序处理任务怎么办?即,就像通过有限并发的队列工作一样。
提前致谢!
解决方案
推荐阅读
- php - 如何传递类别 ID 以形成帖子
- regex - 在 Perl 中的某个特定匹配项下方编辑/匹配字符串 n 行?
- haskell - 块缩进会导致错误吗?
- html - Sticky footer with background image
- python - 如何从scala中的avro文件中读取元数据
- html - How do I stack two rows on top of each other using Bootstrap?
- sparql - Virtuoso SPARQL Bug 与 BIND
- c# - 如何在 Azure Function 中定义“外部”StorageAccount?
- php - How to setup an existing php project which used composer in a localhost with xampp?
- css - How to make table width auto with d3.js