В настоящее время у меня есть код в форме генератора, который вызывает задачу, связанную с вводом-выводом.Генератор на самом деле также вызывает суб-генераторы, так что было бы желательно более общее решение.
Что-то вроде следующего:
def processed_values(list_of_io_tasks):
for task in list_of_io_tasks:
value = slow_io_call(task)
yield postprocess(value) # in real version, would iterate over
# processed_values2(value) here
У меня полный контроль над slow_io_call
, и яМне все равно, в каком порядке я получу предметы от processed_values
.Есть ли что-то вроде сопрограмм, которые я могу использовать, чтобы получить результат в самом быстром порядке, превратив slow_io_call
в асинхронную функцию и используя тот вызов, который быстрее всего возвращает?Я ожидаю, что list_of_io_tasks
будет длиной не менее тысячи записей.Я никогда не выполнял никакой параллельной работы, кроме явных потоков, и, в частности, я никогда не использовал различные доступные формы легких потоков.
Мне нужно использовать стандартную реализацию CPython, и я 'работает на Linux.