o b@sXdZddlZddlmZddlmZddZddZd d Z d d Z d dZ gdZ dS)zY Extended thread dispatching support. For basic support see reactor threading API docs. N)defer)failurecs4tfdd}|j||g|Ri|S)a3 Call the function C{f} using a thread from the given threadpool and return the result as a Deferred. This function is only used by client code which is maintaining its own threadpool. To run a function in the reactor's threadpool, use C{deferToThread}. @param reactor: The reactor in whose main thread the Deferred will be invoked. @param threadpool: An object which supports the C{callInThreadWithCallback} method of C{twisted.python.threadpool.ThreadPool}. @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. cs(|r j|dSj|dSN)callFromThreadcallbackerrback)successresultdreactor:/usr/lib/python3/dist-packages/twisted/internet/threads.pyonResult*sz#deferToThreadPool..onResult)rDeferredcallInThreadWithCallback)r threadpoolfargskwargsrr r rdeferToThreadPoolsrcOs*ddlm}t|||g|Ri|S)at 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. rr )twisted.internetr r getThreadPool)rrrr r r r deferToThread5s rcCs"|D] \}}}||i|qdS)z" Run a list of functions. Nr ) tupleListrrrr r r _runMultipleFsrcCsddlm}|t|dS)z Run a list of functions in the same thread. tupleList should be a list of (function, argsList, kwargsDict) tuples. rrN)rr callInThreadr)rr r r rcallMultipleInThreadNs rcsDtfdd}||}t|tjr ||S)a Run a function in the reactor from a thread, and wait for the result synchronously. If the function returns a L{Deferred}, wait for its result and return that. @param reactor: The L{IReactorThreads} provider which will be used to schedule the function call. @param f: the callable to run in the reactor thread @type f: any callable. @param a: the arguments to pass to C{f}. @param kw: the keyword arguments to pass to C{f}. @return: the result of the L{Deferred} returned by C{f}, or the result of C{f} if it returns anything other than a L{Deferred}. @raise Exception: If C{f} raises a synchronous exception, C{blockingCallFromThread} will raise that exception. If C{f} returns a L{Deferred} which fires with a L{Failure}, C{blockingCallFromThread} will raise that failure's exception (see L{Failure.raiseException}). cs(tjgRi}|jdSr)r maybeDeferredaddBothput)r arkwqueuer r_callFromThreadqsz/blockingCallFromThread.._callFromThread)Queuerget isinstancerFailureraiseException)r rr#r$r&r r r"rblockingCallFromThreadYs  r,)rrrr,) __doc__r%r'rrtwisted.pythonrrrrrr,__all__r r r rs  $ #