Не ответ на ваш вопрос:
Когда речь идет о простых генераторах, deque
кажется просто немного быстрее, чем цикл for (более 10%). Можно утверждать, что использование deque
не принесет никаких практических преимуществ и не стоит его ненадежности и возможных побочных эффектов.
Но это становится гораздо важнее, когда мы говорим об асинхронном программировании. Word async
говорит нам, что внутри этого асинхронного генератора происходит некоторый ввод-вывод: в противном случае не было никакой причины делать этот генератор асинхронным в первую очередь. Этот ввод / вывод, вероятно, занимает более 99% времени выполнения (см. этот ответ и особенно последний фрагмент кода). Это превратит 10% быстрого итеративного преимущества в нечто совершенно убогое.
Мы просто не увидим ощутимой разницы между асинхронным циклическим и альтернативным подходом после всех усилий, приложенных для оптимизации.
Вообще говоря, «преждевременная оптимизация - корень зла», и только «3% критического кода» стоит оптимизировать . Какие 3% можно сказать только после измерений, а когда речь идет об асинхронном программировании, это, вероятно, будут вещи ввода-вывода, а не итерации.
Ответ на ваш вопрос:
deque
работает быстрее, чем для цикла только потому, что он реализован в C. Нет (как мне известно) реализации C подобных функций, которые работают с асинхронными итерациями. Поэтому я боюсь, что async for _ in asyncgen(): pass
- это единственный вариант, который у вас есть сейчас, если вы не хотите писать код на Си.