Как подсчитать и отобразить в консоли кол-во работающих coroutine в asyncio.gather()
Как подсчитать и отобразить в консоли кол-во работающих coroutine в asyncio.gather()?
На периодической основе нужно отображать в консоле сколько из скольки coroutines работает.
tasks = ( self.FetchOHCL(pair, 7*12, '2h', False, 3, 60) for pair in pairs)
results = await aio.gather(*tasks, return_exceptions=True)
Ответы (2 шт):
Автор решения: eri
→ Ссылка
Одновременно работает только одна таска, но можно посчитать сколько из них не завершено. На таймер повесить например такую конструкцию:
count = len(filter( lambda x: x.done() == False, tasks))
Но лучше типовой вариант с wait.
pending = tasks
while pending:
done, pending = await asyncio.wait(
pending,
timeout=10,
return_when=asyncio.FIRST_COMPLETED
)
print(datetime.datetime.now(), len(pending), end='\r')
Тут принт будет отрабатывать каждые 10 секунд и при завершении каждой задачи.
Автор решения: Yuriy Tigiev
→ Ссылка
Обновил код @eri
pending = list( tasks )
while pending:
done, pending = await aio.wait(
pending,
#timeout=30,
return_when=aio.FIRST_COMPLETED
)
result = [future.result() for future in done][0]
resultsList.append(result)