Пример использования Python Twisted с файловыми дескрипторами - PullRequest
3 голосов
/ 15 января 2010

Я хочу использовать витую для управления связью через каналы Linux (os.pipe ()) и fifos (os.mkfifo ()) между главным процессом и набором подчиненных процессов. Хотя я уверен, что для этих типов файловых дескрипторов можно использовать twisted (в конце концов, twisted отлично подходит для сокетов tcp, которые * nix абстрагируется как файловые дескрипторы), я не могу найти никаких примеров такого использования. У кого-нибудь есть ссылки, пример кода или совет?

Ответы [ 2 ]

12 голосов
/ 15 января 2010

Вы можете использовать reactor.spawnProcess для установки произвольных отображений файловых дескрипторов между родительским процессом и порожденным им дочерним процессом. Например, чтобы запустить программу и предоставить ей два дополнительных выходных дескриптора (в дополнение к stdin, stdout и stderr), с помощью которых она может отправлять байты в родительский процесс, вы должны сделать что-то вроде этого:

reactor.spawnProcess(protocol, executable, args,
                     childFDs={0: 'w', 1: 'r', 2: 'r', 3: 'r', 4: 'r'})

Реактор позаботится о создании каналов для вас и назовет childDataReceived на ProcessProtocol, который вы передадите, когда данные будут считаны с них. Подробности смотрите в spawnProcess API документах .

Если вы также используете Twisted на дочернем конце, то в основном вы хотите посмотреть на twisted.internet.stdio. stdiodemo.py и stdin.py в основных примерах покажут, как использовать этот модуль.

0 голосов
/ 15 января 2010

В нем нет ничего встроенного для асинхронного ввода-вывода. Кто-то написал для нее libaio wrapper , но он долгое время не затрагивался, и я не знаю, работает ли он до сих пор.

В худшем случае вы можете использовать select, чтобы увидеть, есть ли что-нибудь доступное для чтения, но это не поможет вам в написании.

...