Комментарии 18
Как минимум, узнал про модуль tornado.gen, спасибо!
+2
А txmongo, не пробовали случайно?
Он ведь вроде бы как раз и предназначен для асинхронных запросов к монгодб.
Он ведь вроде бы как раз и предназначен для асинхронных запросов к монгодб.
-1
Нет, пока asyncmongo хватает. Он тоже для этого.
0
О, пожалуй, то что нужно, спасибо
0
посмотрите еще motor обязательно.
0
Есть народ такой «Нахуа». Костыль ведь. При чём работающий не всегда. Или на творчество потянуло?
+1
Такое лучше спрятать подальше и никому не показывать.
0
наверное все же «Самая короткаЯ»
0
<irony>Как только люди не извращаются, лишь бы Erlang не учить...</irony>
+1
Очень по-хакерски =)
Но, я уверен, тут нужно смотреть в сторону модификации абстрактного синтаксического дерева (AST), а не байт-кода. Для этого есть модуль docs.python.org/library/ast.html
Допустим, если встретили в AST функцию, обернутую в декоратор с именем
Из плюсов:
* лучшая переносимость между версиями (т.к. формат AST документирован, а байт-код может изменяться без предупреждения)
* трансформация происходит в момент «компиляции» а не в момент импорта (т.е. в .pyc файле будет уже
* код AST-трансформации по идее должен быть гораздо проще
* не нужно ничего манкипатчить
* проблемы со сложной декомпозицией и установкой результата «не-переменным» должны отпасть.
Из минусов — я не знаю есть ли возможность применять AST трансформацию автоматически, скорее всего нужно писать Мakefile и компилировать .pyo отдельно. К сожалению, в Python нет опций компилятора, как в Erlang parse_transform например.
Может попробуете на досуге? ;-)
Но вообще очень интересный способ, спасибо! Как в NodeJS без
Но, я уверен, тут нужно смотреть в сторону модификации абстрактного синтаксического дерева (AST), а не байт-кода. Для этого есть модуль docs.python.org/library/ast.html
Допустим, если встретили в AST функцию, обернутую в декоратор с именем
@shortgen
, то ищем в её теле оператор бинарного сдвига и заменяем его на yield + Task.Из плюсов:
* лучшая переносимость между версиями (т.к. формат AST документирован, а байт-код может изменяться без предупреждения)
* трансформация происходит в момент «компиляции» а не в момент импорта (т.е. в .pyc файле будет уже
yield
).* код AST-трансформации по идее должен быть гораздо проще
* не нужно ничего манкипатчить
* проблемы со сложной декомпозицией и установкой результата «не-переменным» должны отпасть.
Из минусов — я не знаю есть ли возможность применять AST трансформацию автоматически, скорее всего нужно писать Мakefile и компилировать .pyo отдельно. К сожалению, в Python нет опций компилятора, как в Erlang parse_transform например.
Может попробуете на досуге? ;-)
Но вообще очень интересный способ, спасибо! Как в NodeJS без
yield
живут не понимаю.0
Сделал то же самое на AST, если кому интересно habrahabr.ru/post/153949/
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Самая короткая запись асинхронных вызовов в tornado или патчим байткод в декораторе