Я думаю, что вы путаете JS async API с Python. В Python, когда вы вызываете функцию сопрограммы, она возвращает сопрограмму (похожую на вооруженный генератор), но не планирует ее в цикле событий. (т.е. не запускается / не потребляет его)
У вас есть два варианта:
1) Вы можете ждать его через await
или более старый yield from
.
2) Вы можете asyncio.create_task(coroutine_function())
. Это эквивалентно вызову обещания в JS без предоставления ему обработчика или ожидания его.
Предупреждение, которое вы видите, говорит о том, что сопрограмма не работает. он был только создан, но не использован.
Что касается вашего кода, есть две ошибки. Во-первых, urllib - это блокирующая библиотека, из которой вы не можете создать задачу, и при этом она не может быть запущена асинхронно, вместо этого посмотрите aiohttp.ClientSession
.
Во-вторых, предупреждение, которое вы видите, вероятно, вызвано тем, что вы звоните AsyncSend
синхронно (не ожидая его). Опять же, в JS это, вероятно, было бы хорошо, так как все в JS асинхронно. В Python вы должны использовать один из двух основных методов, которые я упомянул выше.
Если вы настаиваете на использовании блокирующей библиотеки, вы можете запустить ее в другом потоке, чтобы не блокировать цикл обработки событий. Как упомянул Cloudomation, сделать это. Вы должны использовать asyncio.run_in_executor(None, lambda: your_urllib_function())