
    sKg8                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 ddl
mZ ej                  dk(  rd dlZd dlZd dlmZ g dZ eed	      Zej(                  ej*                  fZej.                  e j0                  d
Ze j4                  dk(  reed<   dZ G d d      Z e       Zej<                  Zej>                  Zej@                  Z ejB                  Z!ejD                  Z"ddZ#d Z$y)    N)
sem_unlink)util   )spawnwin32)	duplicate)ensure_runningregister
unregisterpthread_sigmask)folderfileposixsemlockFc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
ResourceTrackerc                 R    t        j                         | _        d | _        d | _        y N)	threadingLock_lock_fd_pidselfs    r/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/joblib/externals/loky/backend/resource_tracker.py__init__zResourceTracker.__init__N   s    ^^%
	    c                 :    | j                          | j                  S r   )r	   r   r   s    r   getfdzResourceTracker.getfdS   s    xxr   c                 t   | j                   5  | j                  | j                         r
	 ddd       yt        j                  | j                         t        j
                  dk(  r!	 t        j                  | j                  d       d| _        d| _        t        j                  d       g }	 |j                  t        j                  j                                t        j                          \  }}t        j"                  dk(  r7t%        t'        j(                  |      d      }t        j                  |       |}dt*        j,                   d	| d
t.         d}	 |j                  |       t1        j2                         }|gt5        j6                         d|}t5        j8                  d|        	 t:        r(t=        j>                  t<        j@                  tB               tE        |||      }t:        r)t=        j>                  t<        jF                  tB               	 || _        || _        	 t        j"                  dk(  rtK        jL                  |       nt        j                  |       	 ddd       y# t        $ r Y w xY w# t        $ r Y w xY w# t:        r)t=        j>                  t<        jF                  tB               w w xY w# tH        $ r t        j                  |        w xY w# t        j"                  dk(  rtK        jL                  |       w t        j                  |       w xY w# 1 sw Y   yxY w)zMake sure that resource tracker process is running.

        This can be run from any process.  Usually a child process will use
        the resource created by its parent.Nr   r   z^resource_tracker: process died unexpectedly, relaunching.  Some folders/sempahores might leak.r   T)inheritablezfrom z import main; main(z, )z-czlaunching resource tracker: )'r   r   _check_aliveosclosenamewaitpidr   OSErrorwarningswarnappendsysstderrfileno	Exceptionpipeplatformr   msvcrtget_osfhandlemain
__module__VERBOSEr   get_executabler   _args_from_interpreter_flagsdebug_HAVE_SIGMASKsignalr   	SIG_BLOCK_IGNORED_SIGNALSspawnv_passfdsSIG_UNBLOCKBaseException_winapiCloseHandle)	r   fds_to_passrw_rcmdexeargspids	            r   r	   zResourceTracker.ensure_runningW   s   
 ZZxx#$$& Z "77g% 

499a0
   	 K""3::#4#4#67 779DAq||w&v33A6DI$//**=aS7)1MC! ""1%**,Md??AM4MM

9$@A
$..",,.> )dK@C$.."..0@ 	<<7*''*HHQKS Z #     : %.."..0@ % !  <<7*''*HHQKS Zs   L.2L.' I4%L.--JA?L.AK3;J./KK+,?L.4	J=L. JL.	JL.JL.1KK K((K++A L++L..L7c                 J    	 | j                  ddd       y# t        $ r Y yw xY w)z8Check for the existence of the resource tracker process.PROBE TF)_sendBrokenPipeErrorr   s    r   r$   zResourceTracker._check_alive   s0    	JJwB'   		s    	""c                 J    | j                          | j                  d||       y)z6Register a named resource, and increment its refcount.REGISTERNr	   rO   r   r'   rtypes      r   r
   zResourceTracker.register   s    

:tU+r   c                 J    | j                          | j                  d||       y)z2Unregister a named resource with resource tracker.
UNREGISTERNrS   rT   s      r   r   zResourceTracker.unregister   s    

<u-r   c                 J    | j                          | j                  d||       y)z@Decrement the refcount of a resource, and delete it if it hits 0MAYBE_UNLINKNrS   rT   s      r   maybe_unlinkzResourceTracker.maybe_unlink   s    

>4/r   c                     t        |      dkD  rt        d      | d| d| dj                  d      }t        j                  | j
                  |      }|t        |      k(  sJ y )Ni   zname too long:
ascii)len
ValueErrorencoder%   writer   )r   rH   r'   rU   msgnbytess         r   rO   zResourceTracker._send   sc    t9s? _--QtfAeWB'..w7$((C(S!!!r   N)__name__r6   __qualname__r   r    r	   r$   r
   r   rZ   rO    r   r   r   r   M   s,    
N `,
.
0
"r   r   c                    r$t        j                  t         j                         t        j                  t        j                  t        j
                         t        j                  t        j                  t        j
                         t        r(t        j                  t        j                  t               t        j                  t        j                  fD ]  }	 |j                           rt        j                   d       t"        j%                         D ci c]  }|i  }}	 t        j&                  dk(  r$t)        j*                  | t,        j.                        } t1        | d      5 }	 |j3                         }|dk(  rn	 |j5                         j7                  d      j9                  d      }|d   dj;                  |d	d
       |d
   }}}|dk(  rk|t"        vr/t=        d| d| dt?        t"        j%                                      |dk(  rH|||   vr	d	||   |<   n||   |xx   d	z  cc<   rt        j                   d| d| d||   |    d       n|dk(  r1||   |= rt        j                   d| d| dtA        |       d       n|dk(  rr||   |xx   d	z  cc<   r%t        j                   d| d| d||   |    d       ||   |   dk(  r>||   |= 	 rt        j                   d|        t#        |   |       ntG        d|      	 ddd       fd}
|jO                         D ]  \  }}|dk(  r |
||        d|v r |
|d   d       	 rt        j                   d        yy# t        $ r Y w xY wc c}w # t        $ r%}	tC        jD                  d| d|	       Y d}	~	d}	~	ww xY w# tH        $ r8 	 t        jJ                  t        jL                           n# tH        $ r Y nw xY wY w xY w# 1 sw Y   xY w# fd}
|jO                         D ]  \  }}|dk(  r |
||        d|v r |
|d   d       w w xY w)!zRun resource tracker.)levelz Main resource tracker is runningr   rbr   r^   r\   r   r   rM   zCannot register z/ for automatic cleanup: unknown resource type (z1). Resource type should be one of the following: rR   z*[ResourceTracker] incremented refcount of  z
 (current r#   rW   z[ResourceTracker] unregister z: registry(rY   z*[ResourceTracker] decremented refcount of [ResourceTracker] unlink resource_tracker: : Nzunrecognized command c                 6   | r&	 t        j                  dt        |        d| d       | D ]+  }	 t	        |   |       rt        j                  d|        - y # t        $ r Y <w xY w# t        $ r%}t        j                  d| d|       Y d }~gd }~ww xY w)Nz%resource_tracker: There appear to be z leaked z  objects to clean up at shutdownrm   rn   ro   )r*   r+   r_   r0   _CLEANUP_FUNCSr   r:   )rtype_registryrU   r'   everboses       r   _unlink_resourceszmain.<locals>._unlink_resources7  s    MM?~./xw ?// 'F"5)$/

%>tf#EF ' !  ! FMM$6tfBqe"DEEFs(   %A (A*	A'&A'*	B3BBr   zresource tracker shut down)(r   log_to_stderrDEBUGr<   SIGINTSIG_IGNSIGTERMr;   r   r@   r>   r-   stdinstdoutr&   r0   r:   rq   keysr2   r3   open_osfhandler%   O_RDONLYopenreadlinestripdecodesplitjoinr`   listr_   r*   r+   RuntimeErrorrA   
excepthookexc_infoitems)fdrt   frU   registrylinesplittedrH   r'   rs   ru   rr   s    `          r   r5   r5      sl    ,
MM&--0
MM&..&..1v113CDii$	GGI % 

56'5':':'<='<er	'<H=r<<<7"&&r2;;7B"d^qzz|3;D#zz|227;AA#FH !!B0   %C g~ N2(.tf 566;W =?#N$7$7$9:;=  j(x645HUOD1$UOD1Q61" JJ L#('4& 1,,4UOD,A+B!!E
 ,$UOD1" JJ"?vQug N,,/M?!!= . -2-" JJ L#('4& 1,,4UOD,A+B!!E $E?40A5 ( 5	"#*$(JJ*CD6(J%& !/u 5d ; +-B3'+JKKG  	 X	F* &.^^%5!E> !.%8	 &6 xhx0(;

/0 w  		 >F $- " (&8b$F!" !"" % 7( K ^X	F* &.^^%5!E> !.%8	 &6 xhx0(;  s   M9
N	*AP -PAN?PDN?!(N	N?PP 9	NN	N<N72N?7N<<N??	P 	$O.-P .	O:7P 9O::P =P?P  PPP ?Qc                 B   t        |      }t        j                  dk7  rlt        j                         \  }}	 ddlm} ddlm} |D cg c]
  } ||       }} |||      t        j                  |       t        j                  |       S dj                  d |D              }		 t        j                  | |	d d ddd d d 	      \  }
}}}
t        j                  |       |S c c}w # t        j                  |       t        j                  |       w xY w# t        $ r Y S w xY w)	Nr   r   )_mk_inheritable)	fork_execrl   c              3   (   K   | ]
  }d | d   yw)"Nrg   ).0xs     r   	<genexpr>z!spawnv_passfds.<locals>.<genexpr>r  s     .A1#Qxs   Tr   )sortedr-   r2   r%   r1   	reductionr   r   r&   r   rB   CreateProcessrC   rA   )pathrJ   passfdserrpipe_readerrpipe_writer   r   r   _passrH   _htrK   s                r   r?   r?   d  s   WoG
||w&(ggi#m	$2,3:;7R_R(7E;T5)HH\"HH]#hh...	#11c4tQdDMAr3 # 
 < HH\"HH]#  	
	s/   C" C
C" $7D C" ",D	DD)r   )%r%   shutilr-   r<   r*   r   _multiprocessingr   multiprocessingr   rN   r   r2   rB   r3   multiprocessing.reductionr   __all__hasattrr;   rx   rz   r>   rmtreeunlinkrq   r'   r7   r   _resource_trackerr	   r
   rZ   r   r    r5   r?   rg   r   r   <module>r      s   \ 
  
    '   <<73 7 12MM6>>2 "MM299=77g *N9 y" y"x $% "11%% --))
K1fr   