Чтобы добавлять сообщения и комментарии, .

@norguhtar:
norguhtar

В догонку.

Deferred — это сердце framework’а асинхронного сетевого программирования Twisted в Python. Это простая и стройная концепция

далее

На практике обычно мы возвращаем Deferred из функций, которые получают Deferred в процессе своей работы, навешиваем большое количество обработчиков, обрабатываем исключения, некоторые исключения возвращаем через Deferred (выбрасываем наверх).

ЛОЛ ШТО?

@norguhtar:
norguhtar

Чем я больше прочитаю про deferred тем больше это меня заводит в тупик. Начинается все описание deferred это же просто! А потом какая-то херня случается и получается не понятная хрень.

@schors:
schors

прикрутить что ли PyMySQL или mysql-connector к twisted?....

@Kerrigan:
Kerrigan

Твистедосоединение в pika для rabbitmq дохнет после первой ошибки в колбеке на получение сообщения.

@rion:
rion

inlineCallbacks прекрасен

@Marchael:
Marchael

Разбираясь в документации twisted'a открыл для себя возможность эмуляции сетевых поключений к серверу без наличия сети. Эта фича кстати активно используется в целях тестирования.

@Kerrigan:
Kerrigan

Много вкусного про twisted.web jcalderone.livejournal.com

@Kerrigan:
Kerrigan

Не юзать adbapi для postgres

@iorlas:
iorlas

Хотел посмотреть что на замену Twisted питонского. Ну, вдруг что изобрели или советуют помимо EM. И что бы вы подумали? Изобрели и советуют. Что? Node.js. Занавес.
На хабре прочитал о том, что "Node.js сами рубисты используют для нестандартных задач, а рельсы для остальной части сайта", в то время как питонисты используют твистед и в ус не дуют, а EM загибается и остаётся эдаким Pylons, который мало кто уже использует, никому он не нужен, да и не советуют его юзать-то.

@Kerrigan:
Kerrigan

Асинхронная обработка списков и прочей ерунды в твистоде oubiwann.blogspot.com

@Stiletto:
Stiletto

class ShittyClass(Deferred):
def __init__(self,fuck):
Deferred.__init__(self)
def real_init(self,data):
self.val = data
return self
d = do_some_asynchronous_shit_with_fuck(fuck)
d.addCallback(real_init)
d.chainDeferred(self)

теперь в инлайнколбэкс коде можно создавать объекты с помощью
shitobj = yield ShittyClass('ololo')
я объебос, да

@teferi:
teferi

Еще чуть-чуть. Чуть-Чуть.. И я наконец доделаю дурацкий 'tail -f over' http c long-polling'ом =)

@Stiletto:
Stiletto

github.com
Если есть достаточно элитная БИДОНОБЛЯДЬ способная пофиксить — реквестирую. Сам я не осилил, насрал гору кода, но нихуя не смог на иозалупе торнады соорудить поведение твистедовских реакторов.

@Stiletto:
Stiletto

Ня. github.com

@silvery:
silvery

Так, голубчик. Пьёте очень много кофе, наверное? Отсюда и нарушение мочеиспускания на лицо.

@Fang:
Fang

блинский ёжик, как заюзать FileSender, учитывая, что он есть тут twistedmatrix.com ???:((

@shimon:
shimon

Давеча решал еще такую задачку. Есть класс-родитель, который реализует некий интерфейс. У него может быть много детей, а сколько и каких — неизвестно. Для автораспознавания таких детей я воспользовался системой плагинов Twisted, и тут напоролся на два косяка.

Первый косяк в том, что implements(IMyInterface) работает только на экземпляре класса, а не на самом классе. Что, в принципе, решается созданием экземпляра прямо в модуле, но ведь не хочется, ведь такой класс не обязан быть синглтоном. Это решается тем, что вместо «implements» мы говорим «classProvides» (естественно, заимпортировав его из zope.interface).

Второй косяк — следствие первого. Дело в том, что на порожденные классы classProvides() не распространяется. Чтобы это обойти, надо сделать метакласс для родительского класса, в __new__() которого для свежеобразованного класса будет вызываться directlyProvides(klass, IMyInterface).

Вот такое вот.

@shimon:
shimon

Мне вот рассказали, а я и не знал. Когда вы делаете какой-нибудь Deferred, даете ему addCallback(blabla).addCallback(bleble)…. и так несколько раз, то вся эта цепочка будет выполнена в один присест. Так что, во-первых, не делайте такие цепочки слишком длинными, а то можете реактор раком поставить, а во-вторых, если вам что-то такое эдакое надо циклично жевать неизвестное наперед число раз из одного Deferred'а — используйте twisted.internet.task.coiterate, оно для того и задумывалось.

Кстати, этот факт напрямую из документации неочевиден.

@binary:
binary

Запостил тикет про утечку памяти: twistedmatrix.com
Уже есть комментарий, поэтому есть надежда, что исправят

@binary:
binary

Очередной фейл в твистеде: искал, почему же у j2j всё ещё течёт память. Оказалось, проблема в Twisted: его функция internJID (http://twistedmatrix.com/documents/current/api/twisted.words.protocols.jabber.jid.html#internJID) не имеет нормального описания, но нужна, судя по всему, для кеширования JIDов, чтобы не делать им каждый раз stringprep, экономя таким образом процессорное время. (Иного объяснения я не нашёл.) Так вот, эта функция никогда не очищает кеш. А так как JIDов через j2j проходит достаточно много, через три дня работы их собирается порядка 40К, на ещё более нагруженных сервисах ситуация будет ещё плачевнее (особенно, если сервис будет без регистрации, а пользоваться им будут люди с огромного к-ва разных серверов.) Поэтому, для теста, сваял патчик, который очищает JIDы, не использовавшиеся в течение 10 минут. Теперь, вроде бы, ситуация стабилизировалась. По-хорошему, там бы использовать memcached и не выпендриваться. Если у кого-то есть такая же проблема и желание протестировать, это ли её причина, обратитесь ко мне за патчем.

Тикет писать буду, но, если честно, даже не знаю, как бы описать проблему так, чтобы на неё обратили внимание, т.к. они вообще ни на что не обращают внимания.

@binary:
binary

Нашёл очередной баг в твистеде: невозможно залогиниться с русскоязычным паролем в Jabber. Тикет: twistedmatrix.com
Нашёлся в следствии решения этой проблемы: trac.jrudevels.org

@binary:
binary

Twisted 11.0.0 выглядит вполне пригодным для запуска на нём транспортов, но проблема с падением транспорта остаётся теперь уже из-за баги в ejabberd, которую, к тому же, не собираются фиксить: support.process-one.net

@binary:
binary

Тихо и незаметно вышел новый Twisted. Где посмотреть Changelog я не нашёл, кто-нибудь знает?
Надо затестить, реально ли хоть на этом запускать эти ваши жабьи транспорты...

@binary:
binary

Очень удобный у Twisted трак — можно завести тикет на проституток. jrudevels.org
btw, селект на этом поле ужасен. Искать нужного среди тысяч ботов — верх юзабилити.

@binary:
binary

Нет, ну куда это годно? twistedmatrix.com Opened 5 weeks ago. Тикет, который должен входить в этот "Bugfix release" делает невозможным использование любого Jabber-транспорта с ванильным твистедом 10.2.0. Nobody cares. :(

@ivan101:
ivan101

обновил для jabber транспортов питон до версии 2.7.1 и твистед 10.2.0. для твистеда нужно применить этот патч twistedmatrix.com
спасибо @binary за наводку

@gelin:
gelin

Мама! Функция с двенадцатью yield. Существует и такой стиль программирования на Twisted?

@gelin:
gelin

Кажется, начал изучать Twisted.
Дежавю. Именно идея с асинхронными колбэками широко используется во Flex. Но там она вызывает отторжение. То ли потому что туда еще и ООП намешали, то ли еще почему...

@binary:
binary

В общем, с новым твистедом не работает j2j по следущей причине: twistedmatrix.com
Предложенный патч я и сам себе сваял, но думал, что есть более правильное решение, ан нет, планируют выпускать багфикс-релиз. Будем ждать.

@binary:
binary

офигеть, j2j то без бубна не заводится на новом твистеде :( напортачили там при рефакторинге, бида-бида...

@binary:
binary

Пренеприятная бага с постоянным вылетанием J2J уже пофикшена в Twisted 10.2.0. Для него никаких дополнительных патчей уже не требуется. Советую всем обновиться, причём если есть любые транспорты/боты на Twisted.

@unregistered:
unregistered

pyicq-t-0.8.1.5 не работает с twisted-10.2.0

@hizel:
hizel

с этим жаббюр ботом меня потянуло на перепись жаббер клиента, хочу интерфейс чата как было у miranda/nConvers :'(

@hizel:
hizel

добре разработчик pysnmp помог и направил мои стопы в сторону "tagged transports/targets" :-)
sourceforge.net

@hizel:
hizel

таки без образования все равно получается процедурная лапша

@Stiletto:
Stiletto

Наткнулся на багу в твистеде (http://twistedmatrix.com/trac/ticket/4520): [Failure instance: Traceback: : exceptions must be classes, or instances, not type /usr/lib/python2.6/site-packages/twisted/internet/defer.py:307:errback /usr/lib/python2.6/site-packages/twisted/internet/defer.py:354:_startRunCallbacks /usr/lib/python2.6/site-packages/twisted/internet/defer.py:371:_runCallbacks /usr/lib/python2.6/site-packages/twisted/internet/defer.py:879:gotResult --- --- /usr/lib/python2.6/site-packages/twisted/internet/defer.py:821:_inlineCallbacks /usr/lib/python2.6/site-packages/twisted/python/failure.py:338:throwExceptionIntoGenerator site.py:59:respond /usr/lib/python2.6/site-packages/twisted/internet/defer.py:821:_inlineCallbacks /usr/lib/python2.6/site-packages/twisted/python/failure.py:338:throwExceptionIntoGenerator ] Уже 2 месяца прошло, а её не чинят :/

@Stiletto:
Stiletto

[Failure instance: Traceback: : global name 'fuck' is not defined /home/stil/git/private/bsr_shortstat/tornado/web.py:685:_execute /home/stil/git/private/bsr_shortstat/tornado/web.py:774:wrapper site.py:48:get /usr/lib/python2.6/site-packages/twisted/internet/defer.py:944:unwindGenerator --- --- /usr/lib/python2.6/site-packages/twisted/internet/defer.py:823:_inlineCallbacks site.py:57:respond ]

@unregistered:
unregistered

Я не понял, в twisted.words не реализовано service discovery?

@rion:
rion

а нет какогонить уже готового велосипеда для перегона HTML (да именно html а не xml) в twisted.words.xish.domish.Element ?

@rion:
rion

у них сайтец переехал?