Pull to refresh

Comments 17

О многом что говорится в статье достаточно ясно рассказано в главе 6 книги «Python. Подробный справочник». 4 изд. Дэвид Бизли, ISBN 978-5-93286-157-8. Рекомендую.
Позволю с вами не согласиться, издание от 2010 года, тогда расширенные генераторы Python были разве что в головах тех, кто их потом начал вводить в язык начиная с года 2012. А без наличия этих самых расширенных генераторов, то о чем я писал не имеет смысла вообще. Если же говорить о реализации coroutine, то я упоминал что тема не нова. Интерес и реализации в Python есть уже достаточно давно. Но! Последние изменения в API расширенных генераторов, позволяют сделать реализацию coroutin очень простой и прозрачной.

Попробуйте например без усложнения кода sapmle.py заставить это заработать на Python 2.6, я уже не говорю о том насколько усложниться модуль concurrency. И я в своем примере еще не задействовал возможность возвращения результата из функции sleep, а она есть. На обычных генераторах, без хаков, это в принципе не возможно сделать.

Хотя согласен с тем что книга очень полезная, хотя и малопопулярная почему-то.
Наверное, ни одна статья о генераторах/короутинах в python не должна обходиться без ссылок на Бизли) В частности все, что описано в этой статье, более подробно рассмотрено здесь http://www.dabeaz.com/finalgenerator/
Ниже я исправил это упущение :), но там coroutine реализованы без использования возможностей последних новшеств API Enhanced Python Generators, таких как например yield from и возврат значения по return из генератора через свойство value экземпляра класса StopIteration.
Вы не заметили моих слов «О многом». Вернее не придали значения этим двум токенам. Если человек почитает Д.Бизли и вернется к Вашей статье, то уверяю материал ляжет в голову значительно легче. IMHO
Согласен, отсутствие ссылки на Бизли, было упущение при написании статьи. Наверно даже стоит поправить саму статью, а не ограничится комментарием.
Пожалуй наверно стоит добавить, что я не в коей мере не претендую на «открытие coroutine» в Python. статья о том, что последние новшества введенные в язык начиная с версии Python 3.3 делают реализацию сопрограм очень простым и понятным делом. Сама же идея сопрограмм в Pythone основанных на генераторах кажется впервые наиболее полно освещена в этой статье. И я рекомендую её для прочтения, тем кто заинтересовался этой темой, даже не смотря на то что информация там существенно устарела.
Спасибо, старался.
Посмотрите стандартный модуль sched, там сама очередь сделана на heapq без пересортировок.
Да и вообще, если честно, данный пример повторяет функциональность sched сложным способом, не давая никаких преимуществ.
Причем тут sched? Он помогает создавать сопрограммы и реализует парадигму event-driven? Вроде нет.
sched тут при двух вещах — он 1) показывает какую структуру данных лучше использовать для очереди событий и 2) показывает что пока в данном примере корутины вам никакой элегантности не дали, все можно было сделать на питоне уровня 1.7 без потери читаемости. Вероятно, дальше мы увидим их мощь когда задача осложнится событиями кроме таймера.
Вероятно, дальше мы увидим их мощь когда задача осложнится событиями кроме таймера.

Безусловно, например когда мы будем останавливать выполнение короутины для ожидания готовности сетевого соединения к чтению и/или записи. Подход будет использован точно такой же как и в примере отправляющем приветы. А насколько я помню sched — это только запуск калбэка по таймеру.

Насчет очереди событий, да тут собственно и не очередь, а просто добавление в отсортированный список.
Видим что состояние изменилось и возвращено в результате. Следующие вызовы next будут возвращать уже его.


Не будет. И не должен.
Да конечно, я опечатался next/send. Я потом еще и при вычитке немного изменил предложение уже видя next вместо send :)
Спасибо сейчас поправлю.
Хочу отметить высочайший уровень статьи. Пожалуйста, хотя бы еще 2 в том же духе!
Sign up to leave a comment.

Articles

Change theme settings