Форум сайта python.su
Внимание! Я дублирую свой вопрос со stackoverflow, потому как ответа так и не дождался.
Сразу предупреждаю, я новичек в 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)
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, in wait_for raise futures.TimeoutError() concurrent.futures._base.TimeoutError
Отредактировано stratum (Май 20, 2020 11:27:11)
Офлайн
Разобрался!
import asyncio semaphore = asyncio.Semaphore(50) async def work(value): print(value) await asyncio.sleep(10) async def work_with_timeout(value): async with semaphore: try: return await asyncio.wait_for(work(value), timeout=3) except asyncio.TimeoutError: return None async def main(): tasks = [] for i in range(0, 10000): tasks.append(work_with_timeout(i)) await asyncio.gather(*tasks)
Офлайн