[Twisted-Python] Asynchronously initializing objects in twisted.web?
Hi, I wonder, if I have this example program: https://twistedmatrix.com/documents/current/web/howto/using-twistedweb.html#... how do I initialize an external resource (like a dictionary, which is fetched from a database) with asynchronous twisted tools, but before the HTTP server starts listening on its port? The goal here is that the HTTP server shouldn't start until it can fetch the desired data. Of course I can do this in a synchronous way, but it feels so unnatural and bad practice to fetch the same stuff synchronously on initialization and asynchronously when the program/reactor is running (often with different libraries). Thanks,
On 08/09/15 15:51, Nagy, Attila wrote:
The goal here is that the HTTP server shouldn't start until it can fetch the desired data. Of course I can do this in a synchronous way, but it feels so unnatural and bad practice to fetch the same stuff
Load the resources in a callback using "reactor.callWhenRunning" and only then call reactor.listenTCP or whatever.
On Sep 8, 2015, at 9:07 AM, Phil Mayers <p.mayers@imperial.ac.uk> wrote:
Load the resources in a callback using "reactor.callWhenRunning" and only then call reactor.listenTCP or whatever.
Just trying to use every opportunity I can to say this: don't use listenTCP, use endpoints: https://twistedmatrix.com/documents/15.4.0/core/howto/endpoints.html <https://twistedmatrix.com/documents/15.4.0/core/howto/endpoints.html> :) -glyph
from twisted.webimport server, resource from twisted.internetimport reactor, defer class Simple(resource.Resource): isLeaf =True def render_GET(self, request): return "<html>Hello, world!</html>" def call_me(): d = defer.Deferred() print "Get something" d.callback("success") return d def run_web(_): print "run_web" site = server.Site(Simple()) reactor.listenTCP(8080, site) d = call_me() d.addCallback(run_web) reactor.run() -- Alex 08.09.15 17:51, Nagy, Attila пишет:
Hi,
I wonder, if I have this example program: https://twistedmatrix.com/documents/current/web/howto/using-twistedweb.html#...
how do I initialize an external resource (like a dictionary, which is fetched from a database) with asynchronous twisted tools, but before the HTTP server starts listening on its port? The goal here is that the HTTP server shouldn't start until it can fetch the desired data. Of course I can do this in a synchronous way, but it feels so unnatural and bad practice to fetch the same stuff synchronously on initialization and asynchronously when the program/reactor is running (often with different libraries).
Thanks,
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
Ah, I was under the impression that listenTCP() can only be called before reactor.run(). I don't now where it came from. Thanks, On 09/08/15 20:41, Alexey Panyovin wrote:
from twisted.webimport server, resource from twisted.internetimport reactor, defer
class Simple(resource.Resource): isLeaf =True def render_GET(self, request): return "<html>Hello, world!</html>" def call_me(): d = defer.Deferred() print "Get something" d.callback("success") return d
def run_web(_): print "run_web" site = server.Site(Simple()) reactor.listenTCP(8080, site)
d = call_me() d.addCallback(run_web) reactor.run()
-- Alex
08.09.15 17:51, Nagy, Attila пишет:
Hi,
I wonder, if I have this example program: https://twistedmatrix.com/documents/current/web/howto/using-twistedweb.html#...
how do I initialize an external resource (like a dictionary, which is fetched from a database) with asynchronous twisted tools, but before the HTTP server starts listening on its port? The goal here is that the HTTP server shouldn't start until it can fetch the desired data. Of course I can do this in a synchronous way, but it feels so unnatural and bad practice to fetch the same stuff synchronously on initialization and asynchronously when the program/reactor is running (often with different libraries).
Thanks,
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
participants (4)
-
Alexey Panyovin
-
Glyph
-
Nagy, Attila
-
Phil Mayers