B
    0*\                 @   sx   d Z dddddddgZdZeZi fd	dZd
d Zdd Zdd ZdddZ	dd Z
G dd deZdadadd ZdS )a/  Drop-in replacement for the thread module.

Meant to be used as a brain-dead substitute so that threaded code does
not need to be rewritten for when the thread module is not present.

Suggested usage is::

    try:
        import _thread
    except ImportError:
        import _dummy_thread as _thread

errorstart_new_threadexit	get_identallocate_lockinterrupt_mainLockTypel        c             C   s   t |t t krtdt |t t kr4tdday| || W n. tk
rZ   Y n   ddl}|  Y nX datrdat	dS )a  Dummy implementation of _thread.start_new_thread().

    Compatibility is maintained by making sure that ``args`` is a
    tuple and ``kwargs`` is a dictionary.  If an exception is raised
    and it is SystemExit (which can be done by _thread.exit()) it is
    caught and nothing is done; all other exceptions are printed out
    by using traceback.print_exc().

    If the executed function calls interrupt_main the KeyboardInterrupt will be
    raised when the function returns.

    z2nd arg must be a tuplez3rd arg must be a dictF    NT)
typetuple	TypeErrordict_main
SystemExit	traceback	print_exc
_interruptKeyboardInterrupt)Zfunctionargskwargsr    r   8C:\ALexclude\prg\programme\Python37\Lib\_dummy_thread.pyr      s     c               C   s   t dS )z'Dummy implementation of _thread.exit().N)r   r   r   r   r   r   =   s    c               C   s   dS )zDummy implementation of _thread.get_ident().

    Since this module should only be used when _threadmodule is not
    available, it is safe to assume that the current process is the
    only thread.  Thus a constant can be safely returned.
       r   r   r   r   r   r   A   s    c               C   s   t  S )z0Dummy implementation of _thread.allocate_lock().)r   r   r   r   r   r   J   s    Nc             C   s   | dk	rt ddS )z-Dummy implementation of _thread.stack_size().Nz'setting thread stack size not supportedr   )r   )sizer   r   r   
stack_sizeN   s    r   c               C   s   t  S )z0Dummy implementation of _thread._set_sentinel().)r   r   r   r   r   _set_sentinelT   s    r   c               @   sF   e Zd ZdZdd ZdddZeZdd	 Zd
d Zdd Z	dd Z
dS )r   a  Class implementing dummy implementation of _thread.LockType.

    Compatibility is maintained by maintaining self.locked_status
    which is a boolean that stores the state of the lock.  Pickling of
    the lock, though, should not be done since if the _thread module is
    then used with an unpickled ``lock()`` from here problems could
    occur from this class not having atomic methods.

    c             C   s
   d| _ d S )NF)locked_status)selfr   r   r   __init__c   s    zLockType.__init__Nc             C   sH   |dks|rd| _ dS | j s&d| _ dS |dkr@ddl}|| dS dS )a  Dummy implementation of acquire().

        For blocking calls, self.locked_status is automatically set to
        True and returned appropriately based on value of
        ``waitflag``.  If it is non-blocking, then the value is
        actually checked and not set if it is already acquired.  This
        is all done so that threading.Condition's assert statements
        aren't triggered and throw a little fit.

        NTr   F)r   timeZsleep)r   ZwaitflagZtimeoutr   r   r   r   acquiref   s    
zLockType.acquirec             C   s   |    d S )N)release)r   typvaltbr   r   r   __exit__   s    zLockType.__exit__c             C   s   | j s
td| _ dS )zRelease the dummy lock.FT)r   r   )r   r   r   r   r!      s    zLockType.releasec             C   s   | j S )N)r   )r   r   r   r   locked   s    zLockType.lockedc             C   s*   d| j rdnd| jj| jjtt| f S )Nz<%s %s.%s object at %s>r&   Zunlocked)r   	__class__
__module____qualname__hexid)r   r   r   r   __repr__   s
    zLockType.__repr__)Nr   )__name__r(   r)   __doc__r   r    	__enter__r%   r!   r&   r,   r   r   r   r   r   X   s   	
	FTc               C   s   t r
tndadS )z^Set _interrupt flag to True to have start_new_thread raise
    KeyboardInterrupt upon exiting.TN)r   r   r   r   r   r   r   r      s    )N)r.   __all__TIMEOUT_MAXRuntimeErrorr   r   r   r   r   r   r   objectr   r   r   r   r   r   r   r   <module>   s   
 	
@