Функция asyncio.wait() это еще один способ вызвать множество асинхронных задач.
Она работает в нескольких режимах.
1. Самый простой - ждем завершения всех задач
async def main():
tasks = [asyncio.create_task(do_it(i)) for i in range(10)]
done, pending = await asyncio.wait(
tasks,
return_when=asyncio.ALL_COMPLETED
)
for task in done:
try:
print(task.result())
except Exception as e:
print(e)
Очень похоже на gather, но работает не так.
▫️возвращает не результаты, а два сета с объектами Task у которых можно забрать результат через task.result() если они в списке done
▫️не гарантирует порядок результатов так как оба объекта это set
▫️не выбрасывает исключение когда оно появляется, а сохраняет его в Task. Исключение появится когда попробуете забрать резултьтат.
2. Ждем завершения первой задачи, даже если там ошибка.
async def main():
tasks = [asyncio.create_task(do_it(i)) for i in range(3)]
done, pending = await asyncio.wait(
tasks,
return_when=asyncio.FIRST_COMPLETED
)
# в done может быть несколько задач!
for task in done:
try:
print(task.result())
except Exception as e:
print(f"Fail: {e}")
# Оставшиеся задачи в pending, как правило, нужно отменить, иначе они будут продолжать работать
for task in pending:
task.cancel()
В сете done будут таски которые успели завершится, причем как успешно так и нет.
3. До первой ошибки.
Тоже самое, но с аргументом FIRST_EXCEPTION
done, pending = await asyncio.wait(
tasks,
return_when=asyncio.FIRST_EXCEPTION
)
Функция завершается как только первая задача упадет с ошибкой.
Учтите, что в любом случае done вы можете обранужить несколько задач, как с ошибками так и успешные.
↗️ Полный листинг примеров здесь
#async
Кинопленка, найденная Станиславом Феофановым в городе Себеже Псковской области.
На мой взгляд, такие личные съемки повседневности в Советском Союзе являются редкими и бесценными историческими документами.
"... В одном из полусгоревших домов я нашел несколько бобин с 8-мм пленкой. Глянул на свет - вроде бы не кино, а что-то документальное. Вернулся в Москву, оцифровал пленку. Оказалось, что часть записей действительно посвящена Себежу, но есть там и Москва и Воронеж. В данном конкретном ролике я собрал себежские эпизоды. Судя по записям на бобине - это где-то конец 60-х годов/начало 70-х годов..."#psk
Подкаст «Земля» про Псковщину и Великие Луки.
В этом выпуске вы услышите про мое знакомство с Псковом, Изборском и Печорами. Историю перипетий формирования современных границ области и находки в густых лесах Псковщины.
Рассказ Ромы Шмелева про Великие Луки и западный край России, находящийся на рубеже не только государственных границ, но и границ человеческой мысли.
Apple Podcasts
Яндекс.Музыка
Google Podcasts
Spotify
Фильм про Себеж https://youtu.be/x0ImFhbtz2o
#psk
Всем привет, меня зовут Андрей Першин. Это мой телеграм-канал, где я рассказываю про все, что мне интересно. Мое творчество — это фотографии, анимация и подкаст.
Я родился в Удмуртии, жил в Ижевске, Казани и Москве, в начале 2017 года уехал из страны и жил в Латвии, с февраля 2023 года живу в Берлине.
Для удобства отметил почти все посты тегами, можете выбрать, что вам интересно. Спасибо, что читаете, смотрите, слушаете и поддерживаете.
#de Германия
#ru Россия
#lv Латвия
#ud Удмуртия
#mo Москва и область
#ua Украина
#fr Франция
#iz Ижевск
#riga
#me Личное, мысли
#art Творчество
#pod Подкаст
#bam Байкало-Амурская магистраль
#vld Владивосток
#psk Псков
#kazan Казань
#nn Нижний Новгород
#smol Смоленск
#ot Другое