Twisted: Связь между отложенным подпроцессом и HTTP-запросами? - PullRequest
4 голосов
/ 04 февраля 2011

Справочная информация:

У меня есть длительный подпроцесс, который искажает порождения.Я подклассифицировал протокол процесса таким образом, чтобы я знал, когда получаю std out, std err и т. Д. Я хотел бы иметь возможность для отдельных запросов http (в течение ряда времени) проверять состояние этих запущенных процессовчерез общие переменные или глобальный класс или что-то еще.

Вопрос:

Как мне получить прослушиватель событий для данных подпроцесса протокола подпроцесса для последующего http-запроса «забрать»».

1 Ответ

3 голосов
/ 04 февраля 2011

Сделать объект «почтовый ящик»; ради аргумента, скажем, это список. Это может быть словарь, или объект, или файл, или база данных; что вы хотите. Все, что подходит для вашего приложения.

Затем, когда вы создадите экземпляр ProcessProtocol, передайте ссылку на почтовый ящик. Когда поступают соответствующие данные, self.mailbox.append(relevantData).

Кроме того, передайте ссылку на этот объект вашему HTTP-ресурсу, который отвечает на эти запросы. Затем в render_GET, relevantData = self.mailbox.pop().

В Twisted нет волшебного способа сделать это. Все зависит от множества разных вещей в вашем приложении и от того, как вы хотите хранить эти данные и управлять ими, которые Twisted явно не несет.

Вопрос, который вы действительно задаете здесь, сводится к следующему: «У меня есть объект a (ваш протокол процесса) и объект b (ваш ресурс HTTP). Как мне получить a вызывать метод в b? Этот FAQ появляется в различных формах в сообществе Twisted, снова и снова, но очень сложно написать хороший ответ на него, который можно использовать повторно, потому что каждый думает, что они задают другой вопрос.

То, что делает Twisted - все Twisted когда-либо делает, действительно - отображает возникновение событий вне вашего процесса - данные, поступающие из подпроцессов, сеть - в вызовы методов в вашем процессе. То, как вы расположите объекты внутри, как вы храните ссылки между ними, и что вы делаете с данными, которые Twisted только что предоставил вам, - полностью зависит от вас . Именно благодаря этой архитектуре Twisted такой мощный. Когда вы научитесь извлекать код ошибки из обратного вызова, вам пора будет уйти:).

...