
    Ug8                        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 j        d
Ze j        dk    reed<   dZ G d d          Z e            Zej        Zej        Zej         Z ej!        Z!ej"        Z"ddZ#d Z$dS )    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
d	S )
ResourceTrackerc                 R    t          j                    | _        d | _        d | _        d S N)	threadingLock_lock_fd_pidselfs    m/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/joblib/externals/loky/backend/resource_tracker.py__init__zResourceTracker.__init__N   s#    ^%%
			    c                 8    |                                   | j        S r   )r	   r   r   s    r   getfdzResourceTracker.getfdS   s    xr   c                 B   | j         5  | j        |                                 r	 ddd           dS t          j        | j                   t          j        dk    r,	 t          j        | j        d           n# t          $ r Y nw xY wd| _        d| _        t          j
        d           g }	 |                    t          j                                                   n# t          $ r Y nw xY wt          j                    \  }}t          j        dk    r9t%          t'          j        |          d          }t          j        |           |}dt*          j         d	| d
t.           d}	 |                    |           t1          j                    }|gt5          j                    d|}t5          j        d|            	 t:          r$t=          j        t<          j         tB                     tE          |||          }t:          r$t=          j        t<          j#        tB                     n1# t:          r%t=          j        t<          j#        tB                     w w xY w|| _        || _        n## tH          $ r t          j        |            w xY w	 t          j        dk    rtK          j&        |           nSt          j        |           n># t          j        dk    rtK          j&        |           w t          j        |           w xY wddd           dS # 1 swxY w Y   dS )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   
 Z I	  I	 x#$$&& I	  I	  I	  I	  I	  I	  I	  I	  """7g%% 
49a0000"       	   K""3:#4#4#6#67777    799DAq|w&&v3A66DIIIM$/MMaMM7MMMC! ""1%%%*,,Md?AAM4MM
@$@@AAA
$ .",.>   )dK@@C$ .".0@   % .".0@    		 !   
 <7**'****HQKKKK <7**'****HQKKKKSI	  I	  I	  I	  I	  I	  I	  I	  I	  I	  I	  I	  I	  I	  I	  I	  I	  I	 s   L)LA76L7
BLB'L,1CL
C+(L*C++A=L)AI+<H+?,I++.II+K	+ JK	:L	;LLLLc                 X    	 |                      ddd           dS # t          $ r Y dS w xY w)z8Check for the existence of the resource tracker process.PROBE TF)_sendBrokenPipeErrorr   s    r   r$   zResourceTracker._check_alive   sH    	JJwB''' 4  	 	 	55	s    
))c                 \    |                                   |                     d||           dS )z6Register a named resource, and increment its refcount.REGISTERNr	   rO   r   r'   rtypes      r   r
   zResourceTracker.register   s0    

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

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

>4/////r   c                     t          |          dk    rt          d          | d| d| d                    d          }t          j        | j        |          }|t          |          k    sJ d S )Ni   zname too long:
ascii)len
ValueErrorencoder%   writer   )r   rH   r'   rU   msgnbytess         r   rO   zResourceTracker._send   s}    t99s?? _---''t''e'''..w77$(C((S!!!!!!r   N)__name__r6   __qualname__r   r    r	   r$   r
   r   rZ   rO    r   r   r   r   M   s          
  N  N  N `  , , ,
. . .
0 0 0
" " " " "r   r   c                 X	   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 ]'}	 |                                 # t          $ r Y $w xY wrt          j        d           d t"                                          D             }	 t          j        dk    rt)          j        | t,          j                  } t1          | d          5 }	 |                                }|dk    rnl	 |                                                    d                              d	          }|d
         d	                    |dd                   |d         }}}|dk    r|t"          vr<t=          d| d| dt?          t"                                                               |dk    rZ|||         vrd||         |<   n||         |xx         dz  cc<   r*t          j        d| d| d||         |          d           n|dk    r7||         |= r+t          j        d| d| dtA          |           d           n|dk    r||         |xx         dz  cc<   r*t          j        d| d| d||         |          d           ||         |         d
k    rj||         |= 	 rt          j        d|            t#          |         |           nD# t          $ r$}	tC          j"        d| d|	           Y d}	~	nd}	~	ww xY wntG          d|          nA# tH          $ r4 	 t          j%        t          j&                      n# tH          $ r Y nw xY wY nw xY w	 ddd           n# 1 swxY w Y   fd }
|'                                D ]\  }}|d!k    r |
||           d!|v r |
|d!         d!           nN# fd }
|'                                D ]\  }}|d!k    r |
||           d!|v r |
|d!         d!           w w xY wrt          j        d"           dS dS )#zRun resource tracker.)levelz Main resource tracker is runningc                     i | ]}|i S rg   rg   ).0rU   s     r   
<dictcomp>zmain.<locals>.<dictcomp>   s    ===er===r   r   rbTr   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                 J   | r:	 t          j        dt          |            d| d           n# t          $ r Y nw xY w| D ]b}	 t	          |         |           rt          j        d|            2# t          $ r$}t          j        d| d|           Y d }~[d }~ww xY wd S )Nz%resource_tracker: There appear to be z leaked z  objects to clean up at shutdownrp   rq   rr   )r*   r+   r_   r0   _CLEANUP_FUNCSr   r:   )rtype_registryrU   r'   everboses       r   _unlink_resourceszmain.<locals>._unlink_resources7  s#    M/~../ /8=/ / /   
 !   D& 	F 	FF"5)$/// G
#Et#E#EFFF  F F FM"Dt"D"Dq"D"DEEEEEEEEF	F 	Fs$   (. 
;;.A22
B <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:   rt   keysr2   r3   open_osfhandler%   O_RDONLYopenreadlinestripdecodesplitjoinr`   listr_   r*   r+   RuntimeErrorrA   
excepthookexc_infoitems)fdrw   fregistrylinesplittedrH   r'   rU   rv   rx   ru   s    `          r   r5   r5      s     -,,,,
M&-000
M&.&.111 Ev13CDDDi$  	GGIIII 	 	 	D	  7
5666==~':':'<'<===Hr<<7""&r2;77B"d^^ I	qHzz||3;;D#zz||227;;AA#FFH !!B$00   %C g~~ N22(=t = =6;= =  $N$7$7$9$9::= =   j((x6645HUOD11$UOD111Q6111"  J!E#(!E !E+/!E !E,4UOD,A!E !E !E  
 ,,$UOD1"  J!= != !=u != !=,/MM!= != !=   .. ---2---"  J!E#(!E !E+/!E !E,4UOD,A!E !E !E   $E?40A55 ( 5	"#* !&$(J(JD(J(J%& %& %& !/u 5d ; ; ; ;#, " " " ($F$F$F$F$F!" !" !" !" !" !" !" !"" 6 ++J3+J+JKKK$   777(   IH 	I	 I	 I	 I	 I	 I	 I	 I	 I	 I	 I	 I	 I	 I	 I	X	F 	F 	F 	F 	F* &.^^%5%5 	9 	9!E>  !!.%8888 xhx0(;;;E	F 	F 	F 	F 	F* &.^^%5%5 	9 	9!E>  !!.%8888 xhx0(;;;;    1
/000001 1s   ;C
CC?Q O08A-N %O0&EN ,.MN 
N	%N?N N		N O0 
O+O
O
OOOOO0OO0$Q 0O44Q 7O48Q ARc                 6   t          |          }t          j        dk    rt          j                    \  }}	 ddlm ddlm} fd|D             } |||          t          j        |           t          j        |           S # t          j        |           t          j        |           w xY wd	                    d |D                       }	 t          j        | |d d dd	d d d 	  	        \  }}	}
}t          j        |	           n# t          $ r Y nw xY w|
S )
Nr   r   )_mk_inheritable)	fork_execc                 &    g | ]} |          S rg   rg   )rk   r   r   s     r   
<listcomp>z"spawnv_passfds.<locals>.<listcomp>l  s#    ;;;R__R((;;;r   ro   c              3   "   K   | ]
}d | d V  dS )"Nrg   )rk   xs     r   	<genexpr>z!spawnv_passfds.<locals>.<genexpr>r  s*      ..Ax1xxx......r   Tr   )sortedr-   r2   r%   r1   	reductionr   r   r&   r   rB   CreateProcessrC   rA   )pathrJ   passfdserrpipe_readerrpipe_writer   _passrH   _htrK   r   s              @r   r?   r?   d  sU   WooG
|w&(gii#m	$222222,,,,,,;;;;7;;;E9T5))H\"""H]#### H\"""H]####hh.......	#1c4tQdD MAr3 #### 	 	 	D	
s   %B *B05D	 	
DD)r   )%r%   shutilr-   r<   r*   r   _multiprocessingr   multiprocessingr   rN   r   r2   rB   r3   multiprocessing.reductionr   __all__hasattrr;   r{   r}   r>   rmtreeunlinkrt   r'   r7   r   _resource_trackerr	   r
   rZ   r   r    r5   r?   rg   r   r   <module>r      s  \ 
			  



       ' ' ' ' ' '                  <7NNNMMM333333 7
6
6 122M6>2 "M29==7g *N9 y" y" y" y" y" y" y" y"x $O%% "1% -)
K1 K1 K1 K1f    r   