Почему в асинхронной функции при задержке не переключается на другую работу?
Тестирую асинхронный ping. По умолчанию host3 отбрасываю в исключения, а host6 недоступный. По логике при проверке недоступного host3 во время ожидания должны сразу переключиться на проверку других хостов, но всё равно происходит ожидание. Почему так?
import aioping
import asyncio
from socket import gaierror
async def do_ping(host):
try:
await aioping.ping(host, timeout=1)
print("UP", host)
except TimeoutError:
print("DOWN:", host)
except gaierror:
print("EXCEPTION:", host)
async def main():
hosts = ['host1', 'host2', 'host3', 'host4', 'host5', 'host6']
for serv in hosts:
task = asyncio.create_task(do_ping(serv))
await task
if __name__ == '__main__':
asyncio.run(main())
Источник: Stack Overflow на русском