Мне нужно запустить несколько экземпляров моего серверного приложения, каждый на своем собственном порту. Это не проблема, если я начну их с os.system или subprocess.Popen, но я бы хотел иметь некоторое взаимодействие с процессом с многопроцессорностью.
Я бы хотел как-то динамически настроить прослушивание разных портов из разных процессов. Просто вызывать реактор.listenTCP этого не делает, потому что я получаю странное сообщение об ошибке 22 при остановке реактора. Я также уверен, что это не правильный способ сделать это. Я искал примеры, но ничего не смог найти. Любая помощь приветствуется.
EDIT:
Спасибо, Цуры, это то, что я хотел бы получить. Но я должен динамически добавлять порты для прослушивания. Например
from twisted.internet import reactor
from multiprocessing import Process
def addListener(self, port, site):
''' Called when I have to add new port to listen to.
site - factory handling input, NevowSite in my case'''
p = Process(target=f, args=(port, func))
p.start()
def f(self, port, func):
''' Runs as a new process'''
reactor.listenTCP(port, func)
Мне нужен способ аккуратно остановить такие процессы. Простое обращение к реактору.stop (), останавливающему дочерний процесс, не делает этого.
Это ошибка, которую я получаю, когда пытаюсь остановить процесс
--- <exception caught here> ---
File "/usr/share/exe/twisted/internet/tcp.py", line 755, in doRead
skt, addr = self.socket.accept()
File "/usr/lib/python2.6/socket.py", line 195, in accept
sock, addr = self._sock.accept()
<class 'socket.error'>: [Errno 22] Invalid argument
Dimitri.