
    h                         S SK r S SKrS SKrS SKrS SKrS SKrSSKJr  SSKJ	r	  SSKJ
r
  SSKJr  / SQr " S S	5      r\" 5       r\R                   r\R"                  r\R$                  r\R&                  rS
 rg)    N   )	_billiard)spawn)util)spawnv_passfds)ensure_runningregister
unregisterc                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
SemaphoreTracker   c                 F    [         R                  " 5       U l        S U l        g N)	threadingLock_lock_fdselfs    BD:\TimeStamps\venv\Lib\site-packages\billiard/semaphore_tracker.py__init__SemaphoreTracker.__init__    s    ^^%
    c                 :    U R                  5         U R                  $ r   )r   r   r   s    r   getfdSemaphoreTracker.getfd$   s    xxr   c                    U R                      U R                  b
   SSS5        g/ n UR                  [        R                  R                  5       5        Sn[        R                  " 5       u  p4 UR                  U5        [        R                  " 5       nU/[        R                  " 5       -   nUSX#-  /-  n[        XVU5        X@l         [        R                  " U5         SSS5        g! [         a     Nf = f!   [        R                  " U5        e = f! [        R                  " U5        f = f! , (       d  f       g= f)zMake sure that semaphore tracker process is running.

This can be run from any process.  Usually a child process will use
the semaphore created by its parent.Nz4from billiard.semaphore_tracker import main;main(%d)z-c)r   r   appendsysstderrfileno	Exceptionospiper   get_executabler   _args_from_interpreter_flagsr   close)r   fds_to_passcmdrwexeargss          r   r   SemaphoreTracker.ensure_running(   s   
 ZZxx# Z K""3::#4#4#67 IC779DA""1%**,ut@@BBsw's+6
 / Z   / Zs^   D1D1-C*D1/AC:D
D1*
C74D16C77D1:DDD..D11
D?c                 (    U R                  SU5        g)z2Register name of semaphore with semaphore tracker.REGISTERN_sendr   names     r   r	   SemaphoreTracker.registerF   s    

:t$r   c                 (    U R                  SU5        g)z4Unregister name of semaphore with semaphore tracker.
UNREGISTERNr1   r3   s     r   r
   SemaphoreTracker.unregisterJ   s    

<&r   c                     U R                  5         SR                  X5      R                  S5      n[        U5      S:  a  [	        S5      e[
        R                  " U R                  U5      nU[        U5      :X  d   eg )Nz{0}:{1}
asciii   zname too long)r   formatencodelen
ValueErrorr#   writer   )r   r)   r4   msgnbytess        r   r2   SemaphoreTracker._sendN   sg      +227;t9s? _--$((C(S!!!r   )r   r   N)__name__
__module____qualname____firstlineno__r   r   r   r	   r
   r2   __static_attributes__ r   r   r   r      s     <%'"r   r   c           
         [         R                   " [         R                  [         R                  5        [         R                   " [         R                  [         R                  5        [        R
                  [        R                  4 H  n UR                  5         M     [        5       n [        R                  " U S5       nU Hc  n UR                  5       R                  S5      u  pEUS:X  a  UR                  U5        M>  US:X  a  UR                  U5        MW  [!        SU-  5      e   SSS5        U(       a#   [&        R(                  " S[+        U5      -  5        U H,  n UR-                  S5      n [.        R0                  " U5        M.     g! [         a     GM  f = f! [         a6     [        R"                  " [        R$                  " 5       6    GM  !     GM  = ff = f! , (       d  f       N= f! [         a     Nf = f! [         a(  n[&        R(                  " S	U< S
U< 35         SnANSnAff = f! f = f! U(       a4   [&        R(                  " S[+        U5      -  5        O! [         a     Of = fU Hg  n UR-                  S5      n [.        R0                  " U5        O5! [         a(  n[&        R(                  " S	U< S
U< 35         SnAOSnAff = fMd  ! f = f   f = f)zRun semaphore tracker.rb   :s   REGISTERs
   UNREGISTERzunrecognized command %rNzRsemaphore_tracker: There appear to be %d leaked semaphores to clean up at shutdownr:   zsemaphore_tracker: z: )signalSIGINTSIG_IGNSIGTERMr   stdinstdoutr'   r"   setioopenstripsplitaddremoveRuntimeError
excepthookexc_infowarningswarnr=   decoder   
sem_unlink)fdfcacheliner)   r4   es          r   mainre   `   sb    MM&--0
MM&..&..1ii$	GGI % EE%WWR! $

 2 24 8ICk)		$-T**+Ds+JKK  "  J!%j) *
 D{{7+K((.  =  		  ! 7	 ,   ! KMMq"IJJK %  J!%j) *  D{{7+K((.  KMMq"IJJK  s2  F*I  G%8F" G%F"G%F")G%+I  ;"G6 #H;5H
FF"
G"-&GG%G	G"G%G""G%%
G3/I  6
HH
H8H3.H;3H88H;;H= K*	"I,+K*,
I96K*8I99K*K"J+*K"+
K	5K	K"K	K" K*"K$	$K*)rS   r#   rL   r   r   r\   _extr    r   r   compatr   __all__r   _semaphore_trackerr   r	   r
   r   re   rH   r   r   <module>rk      sq    
 	  
      "
68" 8"v &' #22&&**
  2r   