Я использую python 3.6, и я создал этот класс для обработки асинхронной задачи, возвращая задачу с самым высоким текущим приоритетом и останавливая оставшиеся.
class AsyncTasks:
"""Execute asynchronous tasks with selective return method"""
@staticmethod
def schedule(*aws):
return [asyncio.ensure_future(task) for task in aws]
@classmethod
async def quickexit(cls, validator, *aws):
tasks = cls.schedule(*aws)
for task in tasks:
result = await task
if validator(result):
break
[task_.cancel() for task_ in tasks]
return result
Где aws
- это список асинхронных задач и порядок приоритетов задается порядком списка, validator
- это функция, которая проверяет, были ли задачи успешными или нет.
Первый : Это правильный способ сделать это?
Второй : Этот код проходит мои тесты и работает асинхронно, но если изменить schedule
метод для
@staticmethod
def schedule(*aws):
return (asyncio.ensure_future(task) for task in aws)
т.е. возвращение генератора вместо списка, поведение меняется на синхронный режим и все задачи выполняются последовательно !!. Я был очень удивлен, и я хочу знать, что происходит !!