[Twisted-Python] Service as a daemon
Jp Calderone
exarkun at divmod.com
Thu Aug 12 17:49:21 MDT 2004
John Toohey wrote:
> Hi all,
>
> I have a twisted server which can be started with the following code :-
>
> if __name__=="__main__":
>
> application = service.Application('feedserver', uid=1, gid=1)
> f = FeedService('feedserver')
> reactor.connectTCP('localhost',8002,f.getFactory())
>
> f.setServiceParent(service.IServiceCollection(application))
> f.startService()
> reactor.run()
There's little point in using service.Application, if it is used as
above. A better way to do this would be to put the above code into a
.tac file (adding the appropriate imports), remove the last two lines,
and run it with "twistd -y <filename.tac>".
>
> The f.startService method makes a call to a database and using the PB
> layer, sends data to another twisted server every 5 minutes. However,
> when I try to create a .tap file and run it as a daemon with this code :-
>
> def makeService(config):
> pbport = int(config["pbport"])
>
> application = service.Application('feedserver', uid=1, gid=1)
> f = FeedService('feedserver')
> serviceCollection = service.IServiceCollection(application)
> internet.TCPClient("localhost",pbport,
> f.getFactory()).setServiceParent(serviceCollection)
> f.startService()
>
> return serviceCollection
>
> The f.startService method is not called, and the data is not sent to the
> other server. What am I missing here?
>
makeService is run when the .tap file is written. That means
f.startService() is called when the .tap file is written. Since the
reactor isn't running at this point, the connection will never happen.
When you later run this .tap file with "twistd -f <filename.tap>", I
would expect the connection to occur. Are you running the resulting tap
file with "twistd -f"?
Jp
More information about the Twisted-Python
mailing list