Как лучше всего управлять реактором Twisted, чтобы он не блокировался? - PullRequest
6 голосов
/ 14 ноября 2010

Вместо того, чтобы запускать реактор.рун (), я хотел бы время от времени вызывать что-то другое (я не знаю, например, реактор.рунс () или что-то в этом роде), поддерживая мой собственный основной цикл. Есть ли лучшая практика для этого с витой?

1 Ответ

11 голосов
/ 14 ноября 2010

Да. Лучшая практика заключается в том, что это плохая идея, и вам никогда не нужно это делать. Он работает не со всеми реакторами, и у вас точно не может быть двух разных библиотек, которые хотят это делать.

Зачем вам нужен собственный основной цикл? Скорее всего, это что-то вроде «Я хочу работать с PyGame» или «Я пишу программу с графическим интерфейсом и хочу использовать основной цикл GTK» или «Я использую Twisted из Blender, и он имеет свою собственную обработку событий». Если это так, вам следует задать этот конкретный вопрос, потому что у каждого из них есть свой ответ.

Если вам абсолютно необходимо сделать это (и, опять же, нет), способ сделать это - периодически звонить reactor.iterate(). Это будет медленно, прерывать обработку сигнала и иметь странную семантику по отношению к reactor.stop(). Это внесет в вашу программу множество ошибок, которых в противном случае не было бы, и когда вам понадобится помощь в их диагностике, если вы спросите кого-то из команды разработчиков Twisted, первое, что они скажут вам: «Прекратите делать это, вы не нужно это делать ".

...