HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/twisted/internet/__pycache__/threads.cpython-310.pyc
o

�b��@sXdZddlZddlmZddlmZdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zgd�ZdS)zY
Extended thread dispatching support.

For basic support see reactor threading API docs.
�N)�defer)�failurecs4t�����fdd�}|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|�dS���j|�dS�N)�callFromThread�callback�errback)�success�result��d�reactor��:/usr/lib/python3/dist-packages/twisted/internet/threads.py�onResult*sz#deferToThreadPool.<locals>.onResult)r�Deferred�callInThreadWithCallback)r�
threadpool�f�args�kwargsrr
r
r�deferToThreadPoolsrcOs*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.
    r�r)�twisted.internetrr�
getThreadPool)rrrrr
r
r�
deferToThread5srcCs"|D]\}}}||i|��qdS)z"
    Run a list of functions.
    Nr
)�	tupleListrrrr
r
r�_runMultipleFs�rcCsddlm}|�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
r�callMultipleInThreadNsrcsDt�������fdd�}|�|����}t|tj�r |��|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(tj�g��Ri���}|��j�dSr)r�
maybeDeferred�addBoth�put)r	��ar�kw�queuer
r�_callFromThreadqsz/blockingCallFromThread.<locals>._callFromThread)�Queuer�get�
isinstancer�Failure�raiseException)rrr#r$r&r	r
r"r�blockingCallFromThreadYs
r,)rrrr,)
�__doc__r%r'rr�twisted.pythonrrrrrr,�__all__r
r
r
r�<module>s$#