我正在使用其 API 使用 threading.Thread 的服务,并且我想在其中使用 Deferreds。
如果我像标准 python 模块一样运行它,我没有任何问题。就像是:
from twisted.internet import reactor
from outside import ServiceUsingThreadingAndDeferred
service = ServiceUsingThreadingAndDeferred()
reactor.listenTCP(port, protocol_factory)
service.start()
reactor.run()
如果我使用 twistd -y运行以下 .tac,则该服务根本不起作用:
from twisted.application import internet, service
from outside import ServiceUsingThreadingAndDeferred
service = ServiceUsingThreadingAndDeferred()
# Application set-up
application = service.Application("appName")
my_server = internet.TCPServer(port, protocol_factory)
my_server.setServiceParent(application)
service.start()
我认为第二种情况的问题是主反应器线程本身没有产生服务线程,但是我不明白为什么(以及是否)它在第一种情况下发生......我使用 callLater 作为解决方法 -成功地:
from twisted.application import internet, service
from outside import ServiceUsingThreadingAndDeferred
from twisted.internet import reactor
service = ServiceUsingThreadingAndDeferred()
# Application set-up
application = service.Application("appName")
my_server = internet.TCPServer(port, protocol_factory)
my_server.setServiceParent(application)
reactor.callLater(1, service.start)
但我不知道这是否是解决这个问题的正确方法。你有什么建议吗?