>>> import asyncio
>>> help(asyncio.wait)
..
Help on function wait in module asyncio.tasks:
wait(fs, *, loop=None, timeout=None, return_when='ALL_COMPLETED')
Wait for the Futures and coroutines given by fs to complete.
Coroutines will be wrapped in Tasks.
Returns two sets of Future: (done, pending).
Usage:
done, pending = yield from asyncio.wait(fs)
Note: This does not raise TimeoutError! Futures that aren't done
when the timeout occurs are returned in the second set.
(END)
Я не совсем понимаю последнее примечание в этой справке (что такое второй набор? он находится в ожидании/повторной обработке? как мне выполнить ожидающие задачи и объединить результаты как выполненных, так и ожидающих, а затем сохранить в БД)
Моя проблема: я использую asyncio с aiohttp, у меня миллионы URL-адресов, некоторые из них могут вызвать ошибку тайм-аута. Я хочу отправить их в очередь на повторную обработку, или об этом должен позаботиться пул событий.
import asyncio
import aiohttp
sem = asyncio.Semaphore(10)
def process_data(url):
with (yield from sem):
response = yield from aiohttp.request('GET', url)
print(response)
loop = asyncio.get_event_loop()
c = asyncio.wait([process_data(url) for url in url_list], timeout=10)
loop.run_until_complete(c)
PS: я не использую метод wait_for
.