MINI MINI MANI MO
3
  \                 @   sx   d Z dddddddgZdZeZi fd
dZdd Zdd Zd
d ZdddZ	dd Z
G dd deZda
dadd ZdS )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
errorstart_new_threadexit	get_ident
allocate_lockinterrupt_mainLockType      c             C   s   t |t t krtdt |t t kr4tdday| || W n. tk
rZ   Y n   ddl}|j  Y nX datrdat	dS )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.
    z2nd arg must be a tuplez3rd arg must be a dictF    NT)
typetuple	TypeErrordict_main
SystemExit	traceback	print_exc
_interruptKeyboardInterrupt)Zfunctionargskwargsr    r   %/usr/lib64/python3.6/_dummy_thread.pyr      s     
c               C   s   t dS )z'Dummy implementation of _thread.exit().N)r   r   r   r   r   r   =   s    c               C   s   dS )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   | dk	rt ddS )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 Zd ZdZdd ZdddZeZdd	 Zd
d Zdd
 Z	dd Z
dS )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    zLockType.__init__Nr   c             C   sH   |dks|rd| _ dS | j s&d| _ dS |dkr@ddl}|j| dS dS )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   timeZsleep)r   ZwaitflagZtimeoutr!   r   r   r   acquiref   s    
zLockType.acquirec             C   s   | j   d S )N)release)r   typvaltbr   r   r   __exit__   s    zLockType.__exit__c             C   s   | j s
td| _ dS )zRelease the dummy lock.FT)r   r   )r   r   r   r   r#      s    zLockType.releasec             C   s   | j S )N)r   )r   r   r   r   locked   s    zLockType.lockedc             C   s*   d| j rdnd| jj| jjtt| f S )Nz<%s %s.%s object at %s>r(   Zunlocked)r   	__class__
__module____qualname__hexid)r   r   r   r   __repr__   s
    zLockType.__repr__r   )Nr   )__name__r*   r+   __doc__r    r"