[Twisted-Python] connection pool

Christian Simms christian.simms at gmail.com
Wed Jan 16 10:48:30 EST 2008


On Jan 16, 2008 8:48 AM,  <Tjerk.Kusters at imtech.nl> wrote:
>
> Hello,
>
> I have build a webserver with Twisted 2.4 with imports of the following:
>
>  from twisted.web import resource, static, server, twcgi
>  from twisted.internet import reactor
>
> I'm adding several mods as child to the root with:
>
>  root = static.File(settings.getSetting("html_directory"))
>  root.putChild(mods.getPath(), mods
>
> The mods are classes like
>
>  class module(resource.Resource):
>    def render_GET(self, request):
>       # do something
>
> The reactor is started as:
>  reactor.listenTCP(_port, server.Site(root))
>  reactor.run( )
>
> Some of the GET request in the mods can take some time to complete. In the
> current situation other request to the server have to wait on this request.
>
> Is it possible to make soms kind of a thread/connection pool so that more
> then one request can be handled at the same time?
>
> Regards,
> Tjerk
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>

Yes it is possible to use a thread pool, in fact twisted comes with
one. However, how you use it depends on what is taking so long for
you:

- if it's database calls then consider using twisted.enterprise.adbapi
- http://twistedmatrix.com/projects/core/documentation/howto/enterprise.html

- if it's python code taking so long then consider breaking your code
into shorter snippets that yield control back to twisted periodically
so that other requests don't get ignored

- if it's network code then make sure you're using Deferred's properly
- http://twistedmatrix.com/projects/core/documentation/howto/defer.html

Hope that helps.

Cheers,
Christian




More information about the Twisted-Python mailing list