扭曲:创建一个ThreadPool然后守护进程导致无法提供信息的挂起

Rob*_*ing 5 python django wsgi twisted threadpool

我正在开发一个Twisted网络应用程序,其中一部分由一个用Django编写的Web界面组成.

我希望使用Twisted的WSGI服务器来托管Web界面,并且我已经编写了一个工作"tap"插件来允许我使用twistd.

当使用-n标志运行服务器时(不要守护进程)一切正常,但是当删除此标志时,服务器根本不响应请求,并且没有记录消息(尽管服务器仍在运行).

Twisted的Trac上有一个错误,似乎完全描述了问题,我的插件恰好是基于票证中引用代码.

不幸的是,这个问题还没有解决 - 而且它是在一年前提出的.

我试图创建一个ThreadPoolService类,它在被调用时扩展Service并启动给定:ThreadPoolstartService

class ThreadPoolService(service.Service):
    def __init__(self, pool):
        self.pool = pool

    def startService(self):
        super(ThreadPoolService, self).startService()
        self.pool.start()

    def stopService(self):
        super(ThreadPoolService, self).stopService()
        self.pool.stop()
Run Code Online (Sandbox Code Playgroud)

但是,Twisted似乎根本没有调用该startService方法.我认为问题在于,使用"tap"插件,ServiceMaker只能返回一个要启动的服务 - 并且属于同一应用程序的任何其他服务都不会启动.显然,我正在返回一个TCPServer包含WSGI根的服务.

在这一点上,我有点像砖墙.有没有人对如何解决这个问题有任何想法?

Gly*_*yph 7

MultiService从你的回来ServiceMaker; 一个包括您ThreadPoolService和您的主要应用程序服务.用于组装此类事物的API非常简单:

multi = MultiService()
mine = TCPServer(...) # your existing application service
threads = ThreadPoolService()
mine.setServiceParent(multi)
threads.setServiceParent(multi)
return multi
Run Code Online (Sandbox Code Playgroud)

鉴于你已经找到了在Twisted中处理这个令人困惑的问题的票,我期待看到你的补丁:).