Middle
104
questionbank
Что такое функция wait()?
Ответ от нейросети
sobes.tech AI
В контексте асинхронного программирования на Python с использованием модуля asyncio, функция asyncio.wait() используется для ожидания завершения нескольких кораутин.
Основные аспекты:
- Возвращает две кортежи:
(done, pending).done: Множество кораутин, которые завершились (выдали результат, вызвали исключение или были отменены).pending: Множество кораутин, которые еще не завершились.
- Принимает итерируемый объект из кораутин (или объектов, ожидающих завершения, таких как задачи).
- Позволяет контролировать условия завершения ожидания:
return_when: Определяет, когдаwaitдолжен вернуться. Может бытьasyncio.FIRST_COMPLETED,asyncio.FIRST_EXCEPTION,asyncio.ALL_COMPLETED(значение по умолчанию).timeout: Максимальное время ожидания в секундах. Если какие-либо задачи не завершились в течение этого времени, они помещаются в наборpending.
- В отличие от
asyncio.gather(), которая возвращает результаты в виде списка после завершения всех кораутин,asyncio.wait()возвращает сеты выполненных и незавершенных кораутин и не собирает результаты автоматически.
Пример использования:
import asyncio
async def coro1():
await asyncio.sleep(1)
print("coro1 finished")
return "Result 1"
async def coro2():
await asyncio.sleep(2)
print("coro2 finished")
# raise ValueError("Something went wrong")
return "Result 2"
async def main():
task1 = asyncio.create_task(coro1())
task2 = asyncio.create_task(coro2())
# Ждем завершения всех задач
done, pending = await asyncio.wait([task1, task2], return_when=asyncio.ALL_COMPLETED)
print("Wait finished")
for task in done:
try:
result = task.result()
print(f"Task result: {result}")
except Exception as e:
print(f"Task raised exception: {e}")
asyncio.run(main())