|
|
1
140
如果我没记错的话你在找 asyncio.Semaphore . 用法示例:
输出:
异步下载的示例
|
|
|
2
94
我用了Mikhails的答案最终得到了这个小宝石
您将运行它而不是正常聚集
|
|
|
3
55
在阅读本答案的其余部分之前,请注意,限制异步IO并行任务数量的惯用方法是
你基本上需要一个固定的尺寸
水塘
下载任务数。
另一种方法是创建固定数量的协同路由进行下载,就像一个固定大小的线程池一样,并使用
至于你的另一个问题,显而易见的选择是
|
|
|
4
13
asyncio池库正好满足您的需要。 https://pypi.org/project/asyncio-pool/
|
|
|
5
7
使用信号量,您还可以创建一个装饰器来包装函数
然后,将decorator添加到origin下载函数中。
现在可以像以前一样调用下载函数,但使用信号量来限制并发性。
应该注意的是,在执行decorator函数时,创建的信号量被绑定到默认事件循环,因此您不能调用
asyncio.Semaphore RuntimeError: Task got Future attached to a different loop |
|
|
6
6
如果您有一个生成器来生成任务,那么可能会有更多的任务无法同时放入内存。
经典
我不喜欢
相反,这里有一个替代方案:
这会在有足够多的活动任务时暂停生成器,并允许事件循环清理已完成的任务。注意,对于较早的python版本,请替换
|
|
|
7
4
小更新: 不再需要创建循环。我调整了下面的代码。只是稍微清理一下。
|
|
|
Jess The Witch · GCP云功能中处理延迟任务的模式 1 年前 |
|
Plup · 连接失败时,PyMongo异步客户端未引发异常 1 年前 |
|
|
user1233894 · 尝试从全局函数传递值 1 年前 |
|
|
Fabiano Taioli · 管理单线程Rust中的阻塞函数 1 年前 |
|
|
river7816 · 为什么spdlog不在async函数中打印 1 年前 |