我需要在不同的端口上运行多个服务器应用程序实例。如果我使用os.system或subprocess.Popen启动它们,这不是问题,但我想使用multiprocessing进行一些进程通信。我想以某种方式动态设置来自不同进程的不同端口的侦听。仅仅调用reactor.listenTCP并不能做到这一点,因为在停止反应器时我会得到奇怪的Errno 22错误。我也很确定这不是正确的方法。我查找了示例,但找不到任何内容。感谢您的帮助。
编辑: 谢谢Tzury,这与我想要的有点相似。但我必须动态添加要侦听的端口。例如:
我需要一种整洁的方法来停止这样的进程。仅仅调用reactor.stop()并不能停止子进程。
当我试图停止一个进程时,出现了以下错误。
迪米特里。
编辑: 谢谢Tzury,这与我想要的有点相似。但我必须动态添加要侦听的端口。例如:
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)
我需要一种整洁的方法来停止这样的进程。仅仅调用reactor.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
迪米特里。
listenTCP
应该就可以了。如果您仍然对这个问题的答案感兴趣,如果您能提供导致“错误22”的示例代码,那将会很有帮助。 - Glyph