这2天写一个基于twisted的socket应用
开发是在Windows机器上,最后的运行是在Linux机器上

由于Windows的机器不支持Application的方式运行
所以在开发时,就使用了reactor.run的模式来运行
写了:
if __name__ == '__main__':
      main()

然后在Linux上想以Application的模式运行、于是想当然的又写了一个函数
main_application(),在这个函数里面实现了application的方法
但最后用twistd运行时一直报错
Failed to load application:'application'

后来才发现,application的实现不能写在一个function里
只能是在py的最外层,无奈改成了
if __name__ == "__main__":
    main_reactor()
else:
    bdb = BDBServer()
    db = bdb.db
    from twisted.application import internet,service
    application = service.Application('bdb_server')
    bservices = service.MultiService()
    bdb_service = internet.TCPServer(constants.LISTENPORT,SocketServerFactory(SocketProtocol,bdb,db))
    adm_service = internet.TCPServer(constants.ADMINPORT,SocketServerFactory(SocketAdminProtocol,bdb,db))
    bdb_service.setServiceParent(bservices)
    adm_service.setServiceParent(bservices)
    bservices.setServiceParent(application)