Я использовал Python в течение многих лет, но лишь постепенно изучал более неясные возможности языка, так как большая часть моего кода предназначена для обработки данных. Генераторы на основе yield
являются частью моего рутинного инструментария, и недавно я прочитал о сопрограммах. Я нашел пример, похожий на этот:
def averager():
sum = 0.0
n = 0
while True:
value = yield
sum += value
n += 1
print(sum/n)
avg = averager()
next(avg) # prime the coroutine
avg.send(3)
avg.send(4)
avg.send(5)
, который печатает среднее значение отправленных ему значений. Я подумал, что что-то подобное может пригодиться в конвейерах обработки данных, поэтому я решил оставить это в голове. То есть, пока я не прочитал следующее уведомление в документации Python :
Поддержка сопрограмм на основе генератора устарела и планируется удалить в Python 3.10.
Очевидно, я хотел бы написать код, ориентированный на будущее, поэтому на данный момент, вероятно, бесполезно начинать изучение сопрограмм на основе генератора. Мой вопрос: Как реализовать этот пример с использованием собственных (asyncio
) сопрограмм? Мне гораздо сложнее обернуть голову вокруг родного синтаксиса сопрограмм.
Хотяпытаясь найти ответ, я нашел связанный вопрос , в котором есть комментарий и ответ , которые в основном говорят: «Вы не можете сделать это с async
, сделайте это с сопрограммами на yield
основе ". Но если они уходят, будет ли какой-нибудь способ сделать это с сопрограммами в 3.10 +?