ó
è¾bc           @   sœ  d  d d d d d g Z  d d l Z d d l Z d d l Z d d l m Z m Z d d l Z d d	 l	 m
 Z
 d d
 l m Z m Z m Z d d l m Z m Z y d d l m Z Wn) e k
 rß e d d d d ƒ ‚ n Xe d ƒ \ Z Z e j j Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d  e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   t   Lockt   RLockt	   Semaphoret   BoundedSemaphoret	   Conditiont   EventiÿÿÿÿN(   t   timet   sleep(   t   current_process(   t   Finalizet   register_after_forkt   debug(   t   assert_spawningt   Popen(   t   SemLocks*   This platform lacks a functioning sem_opens(    implementation, therefore, the requireds+    synchronization primitives needed will nots    function, see issue 3770.i   R   c           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sc   t  j | | | ƒ } |  _ t d | j ƒ |  j ƒ  t j d k r_ d „  } t |  | ƒ n  d  S(   Ns   created semlock with handle %st   win32c         S   s   |  j  j ƒ  d  S(   N(   t   _semlockt   _after_fork(   t   obj(    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   P   s    (	   t   _multiprocessingR   R   R   t   handlet   _make_methodst   syst   platformR
   (   t   selft   kindt   valuet   maxvaluet   slR   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   __init__J   s    
	c         C   s"   |  j  j |  _ |  j  j |  _ d  S(   N(   R   t   acquiret   release(   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   T   s    c         C   s   |  j  j ƒ  S(   N(   R   t	   __enter__(   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR    X   s    c         G   s   |  j  j | Œ  S(   N(   R   t   __exit__(   R   t   args(    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR!   [   s    c         C   s2   t  |  ƒ |  j } t j | j ƒ | j | j f S(   N(   R   R   R   t   duplicate_for_childR   R   R   (   R   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   __getstate__^   s    
	c         C   s5   t  j j | Œ  |  _ t d | d ƒ |  j ƒ  d  S(   Ns    recreated blocker with handle %ri    (   R   R   t   _rebuildR   R   R   (   R   t   state(    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   __setstate__c   s    (   t   __name__t
   __module__R   R   R    R!   R$   R'   (    (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   H   s   	
				c           B   s&   e  Z d  d „ Z d „  Z d „  Z RS(   i   c         C   s   t  j |  t | t ƒ d  S(   N(   R   R   t	   SEMAPHOREt   SEM_VALUE_MAX(   R   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   n   s    c         C   s   |  j  j ƒ  S(   N(   R   t
   _get_value(   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt	   get_valueq   s    c         C   s5   y |  j  j ƒ  } Wn t k
 r, d } n Xd | S(   Nt   unknowns   <Semaphore(value=%s)>(   R   R,   t	   Exception(   R   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   __repr__t   s
    
(   R(   R)   R   R-   R0   (    (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   l   s   	c           B   s   e  Z d  d „ Z d „  Z RS(   i   c         C   s   t  j |  t | | ƒ d  S(   N(   R   R   R*   (   R   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR      s    c         C   sA   y |  j  j ƒ  } Wn t k
 r, d } n Xd | |  j  j f S(   NR.   s)   <BoundedSemaphore(value=%s, maxvalue=%s)>(   R   R,   R/   R   (   R   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR0   „   s    
(   R(   R)   R   R0   (    (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR      s   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  j |  t d d ƒ d  S(   Ni   (   R   R   R*   (   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   ’   s    c         C   sµ   y“ |  j  j ƒ  rP t ƒ  j } t j ƒ  j d k r’ | d t j ƒ  j 7} q’ nB |  j  j ƒ  d k rn d } n$ |  j  j ƒ  d k rŒ d } n d } Wn t k
 r¬ d } n Xd	 | S(
   Nt
   MainThreadt   |i   t   Nonei    t   SomeOtherThreadt   SomeOtherProcessR.   s   <Lock(owner=%s)>(	   R   t   _is_mineR   t   namet	   threadingt   current_threadR,   t   _countR/   (   R   R7   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR0   •   s    		

(   R(   R)   R   R0   (    (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR       s   	c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  j |  t d d ƒ d  S(   Ni   (   R   R   t   RECURSIVE_MUTEX(   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   «   s    c         C   sâ   y´ |  j  j ƒ  r_ t ƒ  j } t j ƒ  j d k rM | d t j ƒ  j 7} n  |  j  j ƒ  } nT |  j  j ƒ  d k rƒ d \ } } n0 |  j  j ƒ  d k r§ d \ } } n d \ } } Wn t k
 rÓ d \ } } n Xd
 | | f S(   NR1   R2   i   R3   i    R4   t   nonzeroR5   R.   s   <RLock(%s, %s)>(   R3   i    (   R4   R<   (   R5   R<   (   R.   R.   (	   R   R6   R   R7   R8   R9   R:   R,   R/   (   R   R7   t   count(    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR0   ®   s    (   R(   R)   R   R0   (    (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   ©   s   	c           B   sh   e  Z d
 d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d
 d „ Z
 d „  Z d	 „  Z RS(   c         C   sM   | p t  ƒ  |  _ t d ƒ |  _ t d ƒ |  _ t d ƒ |  _ |  j ƒ  d  S(   Ni    (   R   t   _lockR   t   _sleeping_countt   _woken_countt   _wait_semaphoreR   (   R   t   lock(    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   Å   s
    c         C   s&   t  |  ƒ |  j |  j |  j |  j f S(   N(   R   R>   R?   R@   RA   (   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR$   Ì   s    
c         C   s,   | \ |  _  |  _ |  _ |  _ |  j ƒ  d  S(   N(   R>   R?   R@   RA   R   (   R   R&   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR'   Ñ   s    c         C   s   |  j  j ƒ  S(   N(   R>   R    (   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR    Ö   s    c         G   s   |  j  j | Œ  S(   N(   R>   R!   (   R   R"   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR!   Ù   s    c         C   s"   |  j  j |  _ |  j  j |  _ d  S(   N(   R>   R   R   (   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   Ü   s    c         C   sQ   y& |  j  j j ƒ  |  j j j ƒ  } Wn t k
 r? d } n Xd |  j | f S(   NR.   s   <Condition(%s, %s)>(   R?   R   R,   R@   R/   R>   (   R   t   num_waiters(    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR0   à   s    
c         C   s±   |  j  j j ƒ  s t d ƒ ‚ |  j j ƒ  |  j  j j ƒ  } x! t | ƒ D] } |  j  j ƒ  qJ Wz |  j j	 t
 | ƒ Wd  |  j j ƒ  x! t | ƒ D] } |  j  j	 ƒ  q• WXd  S(   Ns,   must acquire() condition before using wait()(   R>   R   R6   t   AssertionErrorR?   R   R:   t   xrangeRA   R   t   TrueR@   (   R   t   timeoutR=   t   i(    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   waitè   s    	c         C   s±   |  j  j j ƒ  s t d ƒ ‚ |  j j t ƒ s7 t ‚ x4 |  j j t ƒ rm |  j j t ƒ } | s: t ‚ q: W|  j j t ƒ r­ |  j j	 ƒ  |  j j ƒ  |  j j t ƒ n  d  S(   Ns   lock is not owned(
   R>   R   R6   RD   RA   R   t   FalseR@   R?   R   (   R   t   res(    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   notifyÿ   s    c         C   sî   |  j  j j ƒ  s t d ƒ ‚ |  j j t ƒ s7 t ‚ x4 |  j j t ƒ rm |  j j t ƒ } | s: t ‚ q: Wd } x- |  j j t ƒ r£ |  j j	 ƒ  | d 7} qw W| rê x! t
 | ƒ D] } |  j j ƒ  q· Wx |  j j t ƒ ræ qÑ Wn  d  S(   Ns   lock is not ownedi    i   (   R>   R   R6   RD   RA   R   RJ   R@   R?   R   RE   (   R   RK   t   sleepersRH   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt
   notify_all  s    N(   R(   R)   R3   R   R$   R'   R    R!   R   R0   RI   RL   RN   (    (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   Ã   s   							c           B   s8   e  Z d  „  Z d „  Z d „  Z d „  Z d d „ Z RS(   c         C   s%   t  t ƒ  ƒ |  _ t d ƒ |  _ d  S(   Ni    (   R   R    t   _condR   t   _flag(   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   -  s    c         C   sM   |  j  j ƒ  z+ |  j j t ƒ r3 |  j j ƒ  t St SWd  |  j  j ƒ  Xd  S(   N(   RO   R   RP   RJ   R   RF   (   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   is_set1  s    c         C   sP   |  j  j ƒ  z. |  j j t ƒ |  j j ƒ  |  j  j ƒ  Wd  |  j  j ƒ  Xd  S(   N(   RO   R   RP   RJ   R   RN   (   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   set;  s    c         C   s6   |  j  j ƒ  z |  j j t ƒ Wd  |  j  j ƒ  Xd  S(   N(   RO   R   RP   RJ   R   (   R   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   clearD  s    c         C   s   |  j  j ƒ  z] |  j j t ƒ r2 |  j j ƒ  n |  j  j | ƒ |  j j t ƒ re |  j j ƒ  t St SWd  |  j  j ƒ  Xd  S(   N(   RO   R   RP   RJ   R   RI   RF   (   R   RG   (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyRI   K  s    N(   R(   R)   R   RQ   RR   RS   R3   RI   (    (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyR   +  s
   		
			(   t   __all__R8   t   osR   R   t   _timeR   t   _sleepR   t   multiprocessing.processR   t   multiprocessing.utilR	   R
   R   t   multiprocessing.forkingR   R   R   t   ImportErrort   rangeR;   R*   R+   t   objectR   R   R    R   R   R   (    (    (    s1   /usr/lib/python2.7/multiprocessing/synchronize.pyt   <module>$   s.   $h