← Back to team overview

launchpad-dev team mailing list archive

Re: Number of Librarian (or twisted) database connections

 

On 11-09-04 05:31 PM, Michael Hudson-Doyle wrote:
> On Thu, 01 Sep 2011 17:46:53 -0400, "Francis J. Lacoste" <francis.lacoste@xxxxxxxxxxxxx> wrote:
> Non-text part: multipart/signed

>> We don't explicitely configure a thread pool either. So it's either
>> unbounded or using twisted default settings. And looking at
>> deferToThread it seems that as many threads as required will be created:
>>
>> def deferToThread(f):
>>     """Run the given callable in a separate thread and return a Deferred
>> which
>>     fires when the function completes.
>>     """
>>     def decorated(*args, **kwargs):
>>         d = defer.Deferred()
>>         def runInThread():
>>             return threads._putResultInDeferred(d, f, args, kwargs)
>>
>>         t = threading.Thread(target=runInThread)
>>         t.start()
>>         return d
>>     return mergeFunctionMetadata(f, decorated)
> 
> Where did you find that deferToThread[1]?  AFAICT, this is the one used
> by the librarian (from
> eggs/Twisted-11.0.0-py2.6-linux-x86_64.egg/twisted/internet/threads.py):

I pasted the first definition that 'tags' found. Didn't thought of
checking if it was the correct one :-) That one comes from
lp/codehosting/tests/helpers.py line 113


> 
> def deferToThread(f, *args, **kwargs):
>     """
>     Run a function in a thread and return the result as a Deferred.
> 
>     @param f: The function to call.
>     @param *args: positional arguments to pass to f.
>     @param **kwargs: keyword arguments to pass to f.
> 
>     @return: A Deferred which fires a callback with the result of f,
>     or an errback with a L{twisted.python.failure.Failure} if f throws
>     an exception.
>     """
>     from twisted.internet import reactor
>     return deferToThreadPool(reactor, reactor.getThreadPool(),
>                              f, *args, **kwargs)
> 
> So, we're using the default thread pool, and that seems to be configured
> to use a maximum of 10 threads:
> 
>         def _initThreadPool(self):
>             """
>             Create the threadpool accessible with callFromThread.
>             """
>             from twisted.python import threadpool
>             self.threadpool = threadpool.ThreadPool(
>                 0, 10, 'twisted.internet.reactor')
> 

That's much more comforting! Thanks.

-- 
Francis J. Lacoste
francis.lacoste@xxxxxxxxxxxxx

Attachment: signature.asc
Description: OpenPGP digital signature


References