首先,我需要警告您:我是 asyncio 的新手,我立即警告您,我是 asyncio 的新手,我几乎无法想象引擎盖下的库中有什么。
这是我的代码:
import asyncio
semaphore = asyncio.Semaphore(50)
async def work(value):
async with semaphore:
print(value)
await asyncio.sleep(10)
async def main():
tasks = []
for i in range(0, 10000):
tasks.append(asyncio.wait_for(work(i), timeout=3))
await asyncio.gather(*tasks)
loop = asyncio.get_event_loop()
future = asyncio.ensure_future(main())
loop.run_until_complete(future)
Run Code Online (Sandbox Code Playgroud)
我需要的是:协程work()完成时间不超过3秒,同时不超过50个。3 秒(超时)后,协程 work() 必须停止执行,新的 50 个任务必须开始工作。但就我而言,3秒后崩溃:
Traceback (most recent call last):
File "C:/Users/root/PycharmProjects/LogParser/ssh/async/asyn_test.py", line 19, in <module>
loop.run_until_complete(future)
File "C:\Code\Python3\lib\asyncio\base_events.py", line 579, in run_until_complete
return future.result()
File "C:/Users/root/PycharmProjects/LogParser/ssh/async/asyn_test.py", line 15, in main
await asyncio.gather(*tasks)
File "C:\Code\Python3\lib\asyncio\tasks.py", line 449, …Run Code Online (Sandbox Code Playgroud)