Я хочу немедленно выполнить эти запросы асинхронно, а затем вернуть управление задачам, ранее находившимся в цикле.
Нет способа сделать это в текущей асинхронности, где всевыполняемые задачи находятся в неприоритетной очереди .
Но с вышеуказанным требованием возникает более серьезная проблема.Асинхронные задачи потенциально дают управление циклу событий при каждом блокирующем вызове ввода-вывода или, в более общем случае, при каждом await
.Поэтому «немедленно» и «асинхронно» не сочетаются друг с другом: по-настоящему асинхронная операция не может быть немедленной, потому что она должна быть приостановлена, а когда она приостановлена, другие задачи продолжатся.
Если вы действительно чего-то хотитечтобы немедленно , вам нужно сделать это синхронно .Другие задачи в любом случае будут заблокированы, потому что синхронная операция не позволяет им запускаться.
Вероятно, это причина, по которой asyncio не поддерживает приоритеты задач.По своей природе задачи выполняются в виде коротких фрагментов, которые могут чередоваться произвольным образом, поэтому порядок их выполнения в общем случае не имеет значения.В тех случаях, когда порядок имеет значение, ожидается использование предоставленных устройств синхронизации.