
    .Ph6                        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 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e          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)ResourceTracker   )spawnwin32)	duplicate)ensure_runningregister
unregisterpthread_sigmask)folderfileposixsemlockFc                   .     e Zd ZdZd Zd Z fdZ xZS )r   a  Resource tracker with refcounting scheme.

    This class is an extension of the multiprocessing ResourceTracker class
    which implements a reference counting scheme to avoid unlinking shared
    resources still in use in other processes.

    This feature is notably used by `joblib.Parallel` to share temporary
    folders and memory mapped files between the main process and the worker
    processes.

    The actual implementation of the refcounting scheme is in the main
    function, which is run in a dedicated process.
    c                 \    |                                   |                     d||           dS )z@Decrement the refcount of a resource, and delete it if it hits 0MAYBE_UNLINKN)r
   _send)selfnamertypes      n/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/joblib/externals/loky/backend/resource_tracker.pymaybe_unlinkzResourceTracker.maybe_unlinkY   s0    

>4/////    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: )'_lock_fd_check_aliveoscloser   waitpid_pid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_running^   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                     t          t          d          sd S 	 t                                                       d S # t          $ r Y d S w xY w)N__del__)hasattr_ResourceTrackersuperrJ   ChildProcessError)r   	__class__s    r   rJ   zResourceTracker.__del__   s^     '33 	F	GGOO  	 	 	DD	s    < 
A
	A
)__name__r3   __qualname____doc__r   r
   rJ   __classcell__)rO   s   @r   r   r   J   sd         0 0 0
N  N  N `	 	 	 	 	 	 	 	 	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  rW   ).0r   s     r   
<dictcomp>zmain.<locals>.<dictcomp>   s    ===er===r   r   rbTr   ascii:r   r   PROBEzCannot register z/ for automatic cleanup: unknown resource type (z1). Resource type should be one of the following: REGISTERz*[ResourceTracker] incremented refcount of  z
 (current r   
UNREGISTERz[ResourceTracker] unregister z: registry(r   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 shutdownrb   rc   rd   )r'   r(   lenr-   _CLEANUP_FUNCSr   r7   )rtype_registryr   r   everboses       r   _unlink_resourceszmain.<locals>._unlink_resources(  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DEBUGr9   SIGINTSIG_IGNSIGTERMr8   r   r=   r;   r*   stdinstdoutr#   r-   r7   rg   keysr/   r0   open_osfhandler"   O_RDONLYopenreadlinestripdecodesplitjoin
ValueErrorlistrf   r'   r(   RuntimeErrorr>   
excepthookexc_infoitems)fdrj   fregistrylinesplittedrE   r   r   ri   rk   rh   s    `          r   r2   r2      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                 ~   t           j        dk    r7d |D             }|                     d          } t          j        | ||          S t          |          }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   c                 8    g | ]}|                     d           S )utf-8)encode)rX   args     r   
<listcomp>z"spawnv_passfds.<locals>.<listcomp>R  s$    444

7##444r   r   r`   c              3   "   K   | ]
}d | d V  dS )"NrW   )rX   xs     r   	<genexpr>z!spawnv_passfds.<locals>.<genexpr>W  s*      ..Ax1xxx......r   Tr   )r*   r/   r   r   r<   sortedr{   r?   CreateProcessr@   r>   )pathrG   passfdsrE   _htrH   s          r   r<   r<   P  s    
|w44t444{{7##"4w777//hh.......	#1c4tQdD MAr3 #### 	 	 	D	
s   75B- -
B:9B:)r   )&r"   shutilr*   r9   r'   _multiprocessingr   multiprocessingr    multiprocessing.resource_trackerr   rL    r   r/   r?   r0   multiprocessing.reductionr	   __all__rK   r8   rn   rp   r;   rmtreeunlinkrg   r   r4   _resource_trackerr
   r   r   r   getfdr2   r<   rW   r   r   <module>r      s  R 
			  



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