Pull to refresh

Comments 18

Как минимум, узнал про модуль tornado.gen, спасибо!
А txmongo, не пробовали случайно?
Он ведь вроде бы как раз и предназначен для асинхронных запросов к монгодб.
О, пожалуй, то что нужно, спасибо
Есть народ такой «Нахуа». Костыль ведь. При чём работающий не всегда. Или на творчество потянуло?
в pypy его засунуть — он будет производить мега-электричество мега-пользу
Это каким чудесным образом? Или вы написали чтобы написать?
nvbn засунуть, а не его творение
вы ведь прочитали, чтобы спросить?
Такое лучше спрятать подальше и никому не показывать.
Да ладно, как информация «как можно делать, но не нужно» пойдёт =)
<irony>Как только люди не извращаются, лишь бы Erlang не учить...</irony>
Очень по-хакерски =)

Но, я уверен, тут нужно смотреть в сторону модификации абстрактного синтаксического дерева (AST), а не байт-кода. Для этого есть модуль docs.python.org/library/ast.html

Допустим, если встретили в AST функцию, обернутую в декоратор с именем @shortgen, то ищем в её теле оператор бинарного сдвига и заменяем его на yield + Task.
Из плюсов:
* лучшая переносимость между версиями (т.к. формат AST документирован, а байт-код может изменяться без предупреждения)
* трансформация происходит в момент «компиляции» а не в момент импорта (т.е. в .pyc файле будет уже yield).
* код AST-трансформации по идее должен быть гораздо проще
* не нужно ничего манкипатчить
* проблемы со сложной декомпозицией и установкой результата «не-переменным» должны отпасть.
Из минусов — я не знаю есть ли возможность применять AST трансформацию автоматически, скорее всего нужно писать Мakefile и компилировать .pyo отдельно. К сожалению, в Python нет опций компилятора, как в Erlang parse_transform например.
Может попробуете на досуге? ;-)

Но вообще очень интересный способ, спасибо! Как в NodeJS без yield живут не понимаю.
Sign up to leave a comment.

Articles