Пример использования Python Twisted с файловыми дескрипторами
-
20-09-2019 - |
Вопрос
Я хочу использовать Twisted для управления связью по каналам Linux (os.pipe()) и Fifos (os.mkfifo()) между главным процессом и набором подчиненных процессов.Хотя я уверен, что для этих типов файловых дескрипторов можно использоватьwwisted (в конце концов,wwisted отлично подходит для TCP-сокетов, которые *nix абстрагируются как файловые дескрипторы), я не могу найти примеров такого типа использования.У кого-нибудь есть ссылки, пример кода или совет?
Решение
В нем нет ничего встроенного для асинхронного ввода-вывода.Кто-то написал обертка либайо за это, но его давно не трогали, и понятия не имею, работает ли он еще.
В худшем случае вы можете использовать select
чтобы посмотреть, есть ли что-нибудь, что можно прочитать, но это не поможет вам с письмом.
Другие советы
Вы можете использовать reactor.spawnProcess
для настройки произвольных сопоставлений файловых дескрипторов между родительским процессом и дочерним процессом, который он порождает.Например, чтобы запустить программу и предоставить ей два дополнительных выходных дескриптора (помимо stdin, stdout и stderr), с помощью которых она сможет отправлять байты обратно родительскому процессу, вы должны сделать что-то вроде этого:
reactor.spawnProcess(protocol, executable, args,
childFDs={0: 'w', 1: 'r', 2: 'r', 3: 'r', 4: 'r'})
Реактор позаботится о создании труб для вас и позвонит childDataReceived
на ProcessProtocol
вы передаете, когда из них считываются данные.См. Документация по API spawnProcess для получения подробной информации.
Если вы также используете Twisted на дочерней стороне, то вам в основном нужно смотреть на twisted.internet.stdio
.stdiodemo.py и stdin.py в основные примеры покажет вам, как использовать этот модуль.