
    HWh5:                        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  \R                  S:X  a  S SKrS SKrS SKJr  / SQr\" \S	5      r\R(                  \R*                  4r\R.                  \ R0                  S
.r\ R4                  S:X  a  \\S'   Sr " S S5      r\" 5       r\R<                  r\R>                  r\R@                  r \RB                  r!\RD                  r"SS jr#S r$g)    N)
sem_unlink)util   )spawnwin32)	duplicate)ensure_runningregister
unregisterpthread_sigmask)folderfileposixsemlockFc                   X   ^  \ rS rSrS rS rS rS rS rS r	S r
S	 rU 4S
 jrSrU =r$ )ResourceTrackerM   c                 T    [         R                  " 5       U l        S U l        S U l        g N)	threadingLock_lock_fd_pidselfs    P/usr/lib/python3/dist-packages/joblib/externals/loky/backend/resource_tracker.py__init__ResourceTracker.__init__N   s    ^^%
	    c                 :    U R                  5         U R                  $ r   )r	   r   r   s    r   getfdResourceTracker.getfdS   s    xxr    c                    U R                      U R                  b  U R                  5       (       a
   SSS5        g[        R                  " U R                  5        [        R
                  S:X  a"   [        R                  " U R                  S5        SU l        SU l        [        R                  " S5        / n UR                  [        R                  R                  5       5        [        R                   " 5       u  p#[        R"                  S:X  a6  [%        [&        R(                  " U5      SS9n[        R                  " U5        UnS[*        R,                   S	U S
[.         S3n UR                  U5        [0        R2                  " 5       nU/[4        R6                  " 5       QSPUPn[4        R8                  " SU 35         [:        (       a)  [<        R>                  " [<        R@                  [B        5        [E        XgU5      n[:        (       a)  [<        R>                  " [<        RF                  [B        5        X0l        Xl         [        R"                  S:X  a  [J        RL                  " U5        O[        R                  " U5         SSS5        g! [         a     GN	f = f! [         a     GNf = f! [:        (       a*  [<        R>                  " [<        RF                  [B        5        f f = f! [H         a    [        R                  " U5        e f = f! [        R"                  S:X  a  [J        RL                  " U5        f [        R                  " U5        f = f! , (       d  f       g= f)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	   ResourceTracker.ensure_runningW   s   
 ZZxx#$$&& Z "77g% 

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

9$@A
$}..",,.> )K@C$}.."..0@ 	<<7*''*HHQKS Z #     : %}.."..0@ % !  <<7*''*HHQKS Zs   $M4M/!J&M7-J$A?M$AK( A J. 4K(4LAM
JMJM
J+'M*J++M.7K%%K(("L

LAMM
M!c                 L     U R                  SSS5        g! [         a     gf = f)z8Check for the existence of the resource tracker process.PROBE TF)_sendBrokenPipeErrorr   s    r   r'   ResourceTracker._check_alive   s0    	JJwB'   		s    
##c                 H    U R                  5         U R                  SX5        g)z6Register a named resource, and increment its refcount.REGISTERNr	   rS   r   r*   rtypes      r   r
   ResourceTracker.register   s    

:t+r    c                 H    U R                  5         U R                  SX5        g)z2Unregister a named resource with resource tracker.
UNREGISTERNrX   rY   s      r   r   ResourceTracker.unregister   s    

<-r    c                 H    U R                  5         U R                  SX5        g)z@Decrement the refcount of a resource, and delete it if it hits 0MAYBE_UNLINKNrX   rY   s      r   maybe_unlinkResourceTracker.maybe_unlink   s    

>4/r    c                     [        U5      S:  a  [        S5      eU SU SU S3R                  S5      n[        R                  " U R
                  U5      nU[        U5      :X  d   eg )Ni   zname too long:
ascii)len
ValueErrorencoder(   writer   )r   rK   r*   rZ   msgnbytess         r   rS   ResourceTracker._send   sc    t9s? _--QtfAeWB'..w7$((C(S!!!r    c                 p   > [        [        S5      (       d  g  [        TU ]  5         g ! [         a     g f = f)N__del__)hasattrr   superro   ChildProcessError)r   	__class__s    r   ro   ResourceTracker.__del__   s6     	22	GO  		s   ( 
55)r   r   r   )__name__r9   __qualname____firstlineno__r   r"   r	   r'   r
   r   ra   rS   ro   __static_attributes____classcell__)rs   s   @r   r   r   M   s7    
N `,
.
0
"	 	r    r   c                 D	  ^ T(       a"  [         R                  " [         R                  S9  [        R                  " [        R                  [        R
                  5        [        R                  " [        R                  [        R
                  5        [        (       a)  [        R                  " [        R                  [        5        [        R                  [        R                  4 H  n UR                  5         M     T(       a  [         R                   " S5        ["        R%                  5        Vs0 s H  o30 _M     nn [        R&                  S:X  a%  [(        R*                  " U [,        R.                  5      n [1        U S5       n UR3                  5       nUS:X  a  GO UR5                  5       R7                  S5      R9                  S5      nUS   SR;                  US	S
 5      US
   p8nUS:X  a  Mm  U["        ;  a/  [=        SU SU S[?        ["        R%                  5       5       35      eUS:X  aL  XU   ;  a  S	XC   U'   OXC   U==   S	-  ss'   T(       a%  [         R                   " SU SU SXC   U    S35        OUS:X  a6  XC   U	 T(       a)  [         R                   " SU SU S[A        U5       S35        OUS:X  a}  XC   U==   S	-  ss'   T(       a%  [         R                   " SU SU SXC   U    S35        XC   U   S:X  a6  XC   U	  T(       a  [         R                   " SU 35        ["        U   " U5        OO[G        SU< 35      eGM  SSS5        U4S jn
URO                  5        H  u  p;US:X  a  M  U
" X5        M     SU;   a  U
" US   S5        T(       a  [         R                   " S 5        gg! [         a     GM  f = fs  snf ! [         a'  n	[B        RD                  " SU SU	< 35         Sn	A	NSn	A	ff = f! [H         a;     [        RJ                  " [        RL                  " 5       6    N! [H         a      Nf = ff = f! , (       d  f       GN= f! U4S jn
URO                  5        H  u  p;US:X  a  M  U
" X5        M     SU;   a  U
" US   S5        f f = f)!zRun resource tracker.)levelz Main resource tracker is runningr   rbr    rf   rd   r   r   rQ   zCannot register z/ for automatic cleanup: unknown resource type (z1). Resource type should be one of the following: rW   z*[ResourceTracker] incremented refcount of  z
 (current r&   r]   z[ResourceTracker] unregister z: registry(r`   z*[ResourceTracker] decremented refcount of [ResourceTracker] unlink resource_tracker: : Nzunrecognized command c                 b  > U (       a'   [         R                  " S[        U 5       SU S35        U  H5  n [        U   " U5        T(       a  [
        R                  " SU 35        M5  M7     g ! [         a     NHf = f! [         a(  n[         R                  " SU SU< 35         S nAMw  S nAff = f)Nz%resource_tracker: There appear to be z leaked z  objects to clean up at shutdownr   r   r   )r-   r.   rg   r3   _CLEANUP_FUNCSr   r=   )rtype_registryrZ   r*   everboses       r   _unlink_resourcesmain.<locals>._unlink_resourcesB  s    MM?~./xw ?// 'F"5)$/

%>tf#EF  ' !  ! FMM$6tfBqe"DEEFs(   &A, /A<,
A98A9<
B.B))B.r   zresource tracker shut down)(r   log_to_stderrDEBUGr?   SIGINTSIG_IGNSIGTERMr>   r   rC   rA   r0   stdinstdoutr)   r3   r=   r   keysr5   r6   open_osfhandler(   O_RDONLYopenreadlinestripdecodesplitjoinrh   listrg   r-   r.   RuntimeErrorrD   
excepthookexc_infoitems)fdr   frZ   registrylinesplittedrK   r*   r   r   r   s    `          r   r8   r8      sR    ,
MM&--0
MM&..&..1}v113CDii$	GGI % 

56'5':':'<='<er	'<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(645HOD1$OD1Q61" JJ L#('4& 1,,4OD,A+B!!E
 ,$OD1" JJ"?vQug N,,/M?!!= . -2-" JJ L#('4& 1,,4OD,A+B!!E $?40A5 ( 5	"#*$(JJ*CD6(J%& !/u 5d ; 6 +-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   )N60O?AQ Q	AP0Q	2B
P<Q	=;P8Q	9AP/O:Q	<PQ	Q 6
OO
O>O94P8Q	9O>>P
Q&P42Q	4
Q>Q?Q	QQQ		
QQ ARc                 N   [        U5      n[        R                  S:w  ao  [        R                  " 5       u  p4 SSKJn  SSKJn  U Vs/ s H
  ou" U5      PM     nnU" X5      [        R                  " U5        [        R                  " U5        $ SR                  S U 5       5      n	 [        R                  " X	S S SSS S S 5	      u  pp[        R                  " U5        U$ s  snf ! [        R                  " U5        [        R                  " U5        f = f! [         a     W$ f = f)	Nr   r   )_mk_inheritable)	fork_execr~   c              3   .   #    U  H  nS U S 3v   M     g7f)"N ).0xs     r   	<genexpr>!spawnv_passfds.<locals>.<genexpr>}  s     .A1#Qxs   Tr   )sortedr0   r5   r(   r4   	reductionr   r   r)   r   rE   CreateProcessrF   rD   )pathrM   passfdserrpipe_readerrpipe_writer   r   r   _passrK   _htrN   s                r   rB   rB   o  s    WoG
||w&(ggi#	$2,3:;7R_R(7E;T)HH\"HH]#hh...	#114tQdDMA3 # 
 < HH\"HH]#  	
	s/   C% C 	C% (6D  C% %.D
D$#D$)r   )%r(   shutilr0   r?   r-   r   _multiprocessingr   multiprocessingr   rR   r   r5   rE   r6   multiprocessing.reductionr   __all__rp   r>   r   r   rA   rmtreeunlinkr   r*   r:   r   _resource_trackerr	   r
   ra   r   r"   r8   rB   r   r    r   <module>r      s   \ 
  
    '   <<73 7 12MM6>>2 "MM299=77g *N9 D DN $% "11%% --))
K1fr    