我用以下方式开始扭曲的应用程序:
application = twisted.application.service.Application('myserv')
my_service = MyService()
my_service.setServiceParent(application)
my_factory = twisted.internet.protocol.ServerFactory()
my_factory.protocol = MyProtocol
twisted.application.internet.TCPServer(port, my_factory).setServiceParent(application)
class MyService:
def startService(self):
#only synchronous code here?
在此服务可以接受客户端tcp连接之前,我需要建立与redis服务器的连接,这涉及执行异步代码。我想将d=txredisapi.Connection()
或d = yield txredisapi.Connection()
与inlineCallbacks
一起使用。延迟必须在服务启动之前触发(在接受客户端的tcp连接之前)。启动txredisapi.Connection()
的最佳位置是什么?理想情况下,我想把它放在MyService
课程中。
答案 0 :(得分:1)
只需在toplevel中编写函数即可创建Redis连接并将其传递给MyService。 可以在异步代码中添加服务。
application = twisted.application.service.Application("myserv")
@defer.inlineCallbacks
def startApp():
rc = yeld txredisapi.Connection()
my_service = MyService(rc)
my_service.setServiceParent(application)
my_factory = twisted.internet.protocol.ServerFactory()
my_factory.protocol = MyProtocol
twisted.application.internet.TCPServer(port, my_factory).setServiceParent(application)
startApp()