
    hZ                      l   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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SKJr  SSKJr  SS	KJr  / S
QrSr\R&                  " S5      r " S S5      rSS jrS rS rS rS r\" 5       r\R8                  r\R:                  r\R<                  r\R>                  rg)    N   )
connection)process)	reduction)semaphore_tracker)spawn)util)spawnv_passfds)ensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preload   Qc                   2    \ rS rSrS rS rS rS rS rSr	g)	
ForkServer"   c                 r    S U l         S U l        S U l        [        R                  " 5       U l        S/U l        g )N__main__)_forkserver_address_forkserver_alive_fd_inherited_fds	threadingLock_lock_preload_modulesselfs    ;D:\TimeStamps\venv\Lib\site-packages\billiard/forkserver.py__init__ForkServer.__init__$   s2    #' $(!"^^%
!+    c                 h    [        S U R                   5       5      (       d  [        S5      eXl        g)z>Set list of module names to try to load in forkserver process.c              3   D   #    U  H  n[        U5      [        L v   M     g 7fN)typestr).0mods     r   	<genexpr>4ForkServer.set_forkserver_preload.<locals>.<genexpr>-   s     E/D49#/Ds    z&module_names must be a list of stringsN)allr   	TypeError)r   modules_namess     r   r   !ForkServer.set_forkserver_preload+   s+    Et/D/DEEEDEE -r"   c                     U R                   $ )z|Return list of fds inherited from parent process.

This returns None if the current process was not started by fork
server.
)r   r   s    r   r   ForkServer.get_inherited_fds1   s     """r"   c                    U R                  5         [        U5      S-   [        :  a  [        S5      e[        R                  " [        R
                  5       nUR                  U R                  5        [        R                  " 5       u  p4[        R                  " 5       u  pVXTU R                  [        R                  " 5       /nXq-  n [        R                  " X'5        X64[        R                  " U5        [        R                  " U5        sSSS5        $ !   [        R                  " U5        [        R                  " U5        e = f! [        R                  " U5        [        R                  " U5        f = f! , (       d  f       g= f)a  Request forkserver to create a child process.

Returns a pair of fds (status_r, data_w).  The calling process can read
the child process's pid and (eventually) its returncode from status_r.
The calling process should write to data_w the pickled preparation and
process data.
   ztoo many fdsN)r   lenMAXFDS_TO_SEND
ValueErrorsocketAF_UNIXconnectr   ospiper   r   getfdr   sendfdsclose)r   fdsclientparent_rchild_wchild_rparent_wallfdss           r   r   !ForkServer.connect_to_new_process9   s    	s8a<>)^,,]]6>>*fNN4334 "	H "	G(A(A'--/1FMF	"!!&1) !!! +*""!!! +*s1   A0E8D,E8/EE.E55E88
Fc                 J   U R                      [        R                  " 5         U R                  b
   SSS5        gSnU R                  (       aF  SS1n[
        R                  " S5      nUR                  5        VVs0 s H  u  pEXB;   d  M  XE_M     nnnO0 n[        R                  " [        R                  5       n[        R                  " S5      nUR                  U5        [        R                  " US5        UR                  5         [        R                   " 5       u  p UR#                  5       U/n
XR#                  5       XR                  U4-  n[
        R$                  " 5       nU/[&        R(                  " 5       -   nUSU/-  n[+        XU
5         [        R,                  " U5        Xpl        Xl        SSS5        SSS5        gs  snnf !   [        R,                  " U	5        e = f! [        R,                  " U5        f = f! , (       d  f       NT= f! , (       d  f       g= f)	zMake sure that a fork server is running.

This can be called from any process.  Note that usually a child
process will just reuse the forkserver started by its parent, so
ensure_running() will do nothing.
Nz<from billiard.forkserver import main; main(%d, %d, %r, **%r)	main_pathsys_pathignorer8   i  z-c)r   r   r   r   r   r   get_preparation_dataitemsr7   r8   r   arbitrary_addressbindr:   chmodlistenr;   filenoget_executabler	   _args_from_interpreter_flagsr
   r>   r   )r   cmddesired_keysdataxylisteneraddressalive_ralive_wfds_to_passexeargss                r   r   ForkServer.ensure_runningV   s    ZZ,,.((4 Z
,C $$ +Z811(;'+zz|'3Vaq7HDAD|   v~~.($66yAg&%(! $&779 &#+??#4g">KOO-w8M8M " "C..0C54#D#D#FFDT3K'D"3k:
 HHW%+2(,3)/ /# Z.HHW%HHW%+ /.# Zsg   $HA H:G	G*H9A&H A2G"H5HHG%%G((H  H
H	H
H")r   r   r   r   r   N)
__name__
__module____qualname____firstlineno__r    r   r   r   r   __static_attributes__ r"   r   r   r   "   s    -.#":/4r"   r   c           	         U(       ad  SU;   aI  UbF  S[         R                  " 5       l         [        R                  " U5        [         R                  " 5       ?U H  n [        U5        M     [        R                  bA   [        R                  R                  5         [        [        R                  5      [        l        [        R                  " [        R                   [        R"                  5      n[$        R$                  " [$        R&                  U S9 n[(        R*                  " 5        nUR-                  5       [.        l        UR3                  U[(        R4                  5        UR3                  U[(        R4                  5           UR7                  5        V	V
s/ s H  u  pU	R8                  PM     nn	n
U(       a  OM8  X;   a#  [        R:                  " US5      S:X  d   e[<        eX{;   d   eUR?                  5       S    nSn[        R@                  " 5       S:X  a#   [C        XX5        [        RN                  " U5        SSS5        M  ! [         R                  " 5       ?f = f! [         a     GM  f = f! [        [        4 a     GNf = fs  sn
n	f ! [D         aG    [        RF                  " [        RH                  " 5       6   [        RJ                  RM                  5          Nf = f! [        RN                  " U5        f = f! , (       d  f       N= f! [         a)  nURP                  [P        RR                  :w  a  e  SnANSnAff = f! , (       d  f       O= fSSS5        g! , (       d  f       g= f)zRun forkserver.r   NT)rQ   r   r"   r   )*r   current_process_inheritingr   import_main_path
__import__ImportErrorsysstdinr>   openr:   devnullOSErrorr6   signalSIGCHLDSIG_IGNr7   r8   	selectorsDefaultSelectorgetsockname_forkserverr   register
EVENT_READselectfileobjread
SystemExitacceptfork
_serve_one	Exception
excepthookexc_infostderrflush_exiterrnoECONNABORTED)listener_fdr[   preloadrH   rI   modnamehandlerrY   selectorkeyeventsrfdsscodees                  r   mainr      s    Y%:48G##%1:&&y1++-9G7#  yy	IIOORZZ(CI
 mmFNNFNN;G	v~~k	:h%%'8*2*>*>*@'(I$8$89'9#7#78=E__=NO=NMSCKK=NDO 
 ?777A.#555$$'''__&q)QDwwyA~+&qGE
 HHTN * / ++-9   $ 		 P  ) /NNCLLN;JJ,,./ HHTN *)  77e000 19 (' 
;	:	:s   I
 I$>A I6 M#*AM	LJ
2ALLJ*L LM	
I!$
I32I36J
	J
LAK$	!K'#K$	$K''K?	?L
LLM	L
MM<M	MM		
M	M##
M1c                     XX#U4$ r%   rf   )rC   rB   alivestfd	inheriteds        r   __unpack_fdsr      s    U)33r"   c                 X   UR                  5         [        R                   " U5        [        R                  " [        R                  U5        [        R
                  " U [        S-   5      nU R                  5         [        U5      [        ::  d   e[        U6 u  pV[        l
        n[        l        U[        R                  l        [        U[        R                   " 5       5        S["        R$                  ;   a  SS KnUR)                  5         [*        R,                  " U5      n	[        Xi5        g )Nr   randomr   )r>   r:   rr   rs   r   recvfdsr5   r4   r   rx   r   r   r   _semaphore_tracker_fdwrite_unsignedgetpidrm   modulesr   seedr   _main)
r   rY   r[   r   r?   rC   rB   r   r   r   s
             r   r   r      s    NNHHW
MM&..'* 

A~1
2CGGIs8~%%% *6s);'W{7	;%/3((, 7BIIK( 3;; ;;wD 7!r"   c                    Sn[         R                  n[        U5      U:  aI  [        R                  " X[        U5      -
  5      nU(       d  [        S5      eX-  n[        U5      U:  a  MI  [         R                  U5      S   $ )Nr"   zunexpected EOFr   )UNSIGNED_STRUCTsizer4   r:   r}   EOFErrorunpack)fdrV   lengthr   s       r   read_unsignedr      sq    D!!F
d)f
GGBT*++,,		 d)f

 !!$'**r"   c                     [         R                  U5      nU(       a5  [        R                  " X5      nUS:X  a  [	        S5      eX#S  nU(       a  M4  g g )Nr   zshould not get here)r   packr:   writeRuntimeError)r   nmsgnbytess       r   r   r      sF    


q
!C
""Q;455'l	 #r"   )NN) r   r:   ru   rr   r7   structrm   r    r   r   r   r   r   r	   compatr
   __all__r5   Structr   r   r   r   r   r   r   rx   r   r   r   r   rf   r"   r   <module>r      s     	     
        "% --$c4 c4T8v4"D+ l++11 $;; $;; r"   