
如果我理解你很好,你想限制并发请求数?
有一个内部的对象
asyncio命名
Semaphore,它就像一个异步
RLock。
更新semaphore = asyncio.Semaphore(50)#...async def limit_wrap(url): async with semaphore: # do what you want#...results = asyncio.gather([limit_wrap(url) for url in urls])
假设我做50个并发请求,他们也都在2秒内完成。因此,它不接触限制(只有每秒25个请求)。
这意味着我应该做100个并发请求,他们也都在2秒内太(每秒50个请求)完成。但在此之前,你实际上使这些要求,你怎么能确定他们将如何悠长?
或者,如果你不介意 每秒完成的请求, 但 每秒发出的请求 。您可以:
async def loop_wrap(urls): for url in urls: asyncio.ensure_future(download(url)) await asyncio.sleep(1/50)asyncio.ensure_future(loop_wrap(urls))loop.run_forever()
上面的代码将创建一个
Future实例每隔
1/50一秒。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)