Функция 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
Наконец-то смог поиграть в новый Аркнайтс.
Прошёл первые главы и покрутил гачу. За вход в игру дали Арделию, а в стандартном баннере выпала её копия, а также Лифэн. Пограничник выпал в баннере новичка. Бесплатного легендарного персонажа ещё не выбирал, но в ящике с оружием взял меч для Пограничника.
Впечатления примерно как на бета-тесте, начало игры просто освежило память. Очень хотелось депнуть на Лэватейн, но я сдержался и решил вообще не донатить в игру в первом патче.
Добавляйтесь в друзья: 6327281061
#endfield@ostalf_lab
Мне попался смешной ролик с озвучкой сюжета ХСР через нейросеть. Там иронично озвучивались происходящие события... и у меня появилась глупая идея: записать стартовый геймплей Эндфилда, написать текст, озвучить его и смонтировать всё в ролик.
Почему-то вся эта история хорошо лайкается и воспринимается как ирония, поэтому я по приколу залил видео в ТикТок.
Бездарная трата времени.
#endfield@ostalf_lab
Оказывается Т2x2 нашёл лайфхак по выпадению легендарок в Arknights: Endfield :D
Я обычно не смотрю стримеров, но мне стало интересно как он будет обозревать игру на проплаченном стриме.
Итог: такая себе реклама.
#endfield@ostalf_lab
В следующем месяце стартует бета-тестирование Arknights: Endfield.
Это интересный проект, за которым я слежу с первого бета-теста. Зарезервировал URL, но планировал запустить канал ближе к релизу или после подтверждения русской локализации. Птичка нашептала, что русский перевод всё таки будет, так что канал запустил сегодня. Уже появились первые официальные русскоязычные ресурсы, а 31 октября пройдёт специальная трансляция. Запись трансляции будет доступна с русскими субтитрами.
Постараюсь получить доступ к бета-тестированию или поработать с другим тестером.
Слышали об этой игре?
#endfield@ostalf_lab
Продуктивно провёл первую половину стрима — работал на заводе строил своё производство.
Сегодня умудрился выбить созвездие Эмбер и легендарный меч, а также получил сигнатурное оружие Эмбер за закрытие баннера новичка.
#стрим@ostalf_lab / #endfield@ostalf_lab
🥳Канал по новому Аркнайтсу достиг отметки в десять тысяч подписчиков.
Принял участие в веб-ивенте, но доступ получить не смог. Кто-нибудь из вас стал счастливчиком?
#проекты / #endfield