python - Twisted - 用一个 react 堆监听多个进程的多个端口

标签 python process twisted

我需要在自己的端口上运行我的服务器应用程序的多个实例。如果我用 os.system 或 subprocess.Popen 启动这些不是问题,但我想与多处理进行一些进程通信。

我想以某种方式动态设置监听来自不同进程的不同端口。只是调用 reactor.listenTCP 并不能做到这一点,因为我在停止 react 器时得到了奇怪的 Errno 22。我也很确定这不是正确的方法。我找了例子,但找不到任何东西。任何帮助表示赞赏。

编辑: 谢谢 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

迪米特里。

最佳答案

我不确定你遇到了什么错误。 以下是来自 twisted site 的示例(修改的) 如您所见,它在两个端口上监听,并且可以监听更多端口。

from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor

class QOTD(Protocol):

    def connectionMade(self):
        self.transport.write("An apple a day keeps the doctor away\r\n") 
        self.transport.loseConnection()

# Next lines are magic:
factory = Factory()
factory.protocol = QOTD

# 8007 is the port you want to run under. Choose something >1024
reactor.listenTCP(8007, factory)
reactor.listenTCP(8008, factory)
reactor.run()

关于python - Twisted - 用一个 react 堆监听多个进程的多个端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411281/

相关文章:

python - 我可以将 socket.io 与 twisted.web 一起使用吗?

c - C中的多个定时器

python - 处理协议(protocol)、延迟和命令行输入

python - 我在 NetworkX 图表中看不到标签

Python代码检测OS X El Capitan中的暗模式以更改状态栏菜单图标

Objective-c 获取进程列表、它们的路径和参数

windows - 使用 SetProcessWorkingSetSize 的优缺点

python - SSHCommandClientEndpoint,扭曲。如何执行多个命令?

python - 用两个变量将所有可能性添加到一个列表中

python - 保留(pickle)自定义 sklearn 管道的推荐方法是什么?