ó
    •JÕi*4  ã                   ót  • 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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	QrS
r\R(                  " S5      r " S S\5      rSSS.S jjrS rS rS r\" 5       r\R:                  r\R<                  r\R>                  r\R@                  r g)é    Né   )Ú
connection)Úprocess)Ú	reduction)Úresource_tracker)Úspawn)Úutil)Úensure_runningÚget_inherited_fdsÚconnect_to_new_processÚset_forkserver_preloadé   Úqc                   ó>   • \ rS rSrS rS rS rS rS rS r	S r
S	rg
)Ú
ForkServeré!   c                 ó€   • S U l         S U l        S U l        S U l        [        R
                  " 5       U l        S/U l        g )NÚ__main__)Ú_forkserver_addressÚ_forkserver_alive_fdÚ_forkserver_pidÚ_inherited_fdsÚ	threadingÚLockÚ_lockÚ_preload_modules©Úselfs    Ú!Lib\multiprocessing\forkserver.pyÚ__init__ÚForkServer.__init__#   s:   € Ø#'ˆÔ Ø$(ˆÔ!Ø#ˆÔØ"ˆÔÜ—^’^Ó%ˆŒ
Ø!+ ˆÕó    c                 óp   • U R                      U R                  5         S S S 5        g ! , (       d  f       g = f©N)r   Ú_stop_unlockedr   s    r   Ú_stopÚForkServer._stop+   s   € à�Z‹ZØ×ÑÔ!÷ �ZŽZús   �'§
5c                 óV  • U R                   c  g [        R                  " U R                  5        S U l        [        R                  " U R                   S5        S U l         [
        R                  " U R                  5      (       d   [        R                  " U R                  5        S U l        g )Nr   )	r   ÚosÚcloser   Úwaitpidr	   Úis_abstract_socket_namespacer   Úunlinkr   s    r   r%   ÚForkServer._stop_unlocked0   sz   € Ø×ÑÑ'Øô 	�Š�×*Ñ*Ô+Ø$(ˆÔ!ä
�
Š
�4×'Ñ'¨Ô+Ø#ˆÔä×0Ò0°×1IÑ1I×JÑJÜ�IŠI�d×.Ñ.Ô/Ø#'ˆÕ r"   c                 óT   • [        S U 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r$   )ÚtypeÚstr)Ú.0Úmods     r   Ú	<genexpr>Ú4ForkServer.set_forkserver_preload.<locals>.<genexpr>A   s   é € Ð=ª}¨”4˜“9¤Õ#ª}ùs   ‚ z&module_names must be a list of stringsN)ÚallÚ	TypeErrorr   )r   Úmodules_namess     r   r   Ú!ForkServer.set_forkserver_preload?   s%   € äÑ=©}Ó=×=Ñ=ÜÐ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_fdsE   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   r)   Úpiper   r   Úgetfdr   Úsendfdsr*   )r   ÚfdsÚclientÚparent_rÚchild_wÚchild_rÚparent_wÚallfdss           r   r   Ú!ForkServer.connect_to_new_processM   s  € ð 	×ÑÔÜˆs‹8�a‰<œ>Ó)Ü˜^Ó,Ð,Ü�]Š]œ6Ÿ>™>Ô*¨fØ�N‰N˜4×3Ñ3Ô4Ü "§¢£	ÑˆHÜ "§¢£	ÑˆGØ¨×(AÑ(AÜ&×,Ò,Ó.ð0ˆFà‰MˆFð	"Ü×!Ò! &Ô1ØÐ)ô —’˜Ô!Ü—’˜Ô!÷! +Ñ*øðÜ—’˜Ô"Ü—’˜Ô"Øûä—’˜Ô!Ü—’˜Õ!ú÷! +Õ*ús1   ÁA0E8ÃDÃ,E8Ä/EÅEÅ.E5Å5E8Å8
Fc                 óp  • U R                      [        R                  " 5         U R                  bw  [        R
                  " U R                  [        R                  5      u  pU(       d
   SSS5        g[        R                  " U R                  5        SU l	        SU l        SU l        Sn0 nSnU R                  (       a=  [        R                  " S5      nSU;   a  US   US'   SU;   a  US   US'   SU;   a  US   n[        R                  " [        R                  5       n[        R                   " S5      nUR#                  U5        [$        R&                  " U5      (       d  [        R(                  " US	5        UR+                  5         [        R,                  " 5       u  pš UR/                  5       U	/nX7R/                  5       X�R                  U4-  n[        R0                  " 5       nU/[$        R2                  " 5       -   nUS
U/-  nUb  XÕ-  n[$        R4                  " XÍU5      n [        R                  " U	5        X€l	        X l        Xl        SSS5        SSS5        g!   [        R                  " U
5        e = f! [        R                  " U	5        f = f! , (       d  f       NN= f! , (       d  f       g= f)zÍMake 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.
Nzfimport sys; from multiprocessing.forkserver import main; main(%d, %d, %r, sys_argv=sys.argv[1:], **%r)ÚignoreÚsys_pathÚinit_main_from_pathÚ	main_pathÚsys_argvrC   i€  z-c)r   r   r
   r   r)   r+   ÚWNOHANGr*   r   r   r   r   Úget_preparation_datarB   rC   r   Úarbitrary_addressÚbindr	   r,   ÚchmodÚlistenrE   ÚfilenoÚget_executableÚ_args_from_interpreter_flagsÚspawnv_passfds)r   ÚpidÚstatusÚcmdÚmain_kwsrU   ÚdataÚlistenerÚaddressÚalive_rÚalive_wÚfds_to_passÚexeÚargss                 r   r
   ÚForkServer.ensure_runningj   s8  € ð �Z‹ZÜ×+Ò+Ô-Ø×#Ñ#Ñ/ä Ÿjšj¨×)=Ñ)=¼r¿z¹zÓJ‘�Þà÷ ˆZô —’˜×2Ñ2Ô3Ø+/�Ô(Ø,0�Ô)Ø'+�Ô$ðCˆCð ˆHØˆHØ×$×$Ü×1Ò1°(Ó;�Ø Ó%Ø+/°
Ñ+;�H˜ZÑ(Ø(¨DÓ0Ø,0Ð1FÑ,G�H˜[Ñ)Ø Ó%Ø# JÑ/�Hä—’œvŸ~™~Ô.°(Ü$×6Ò6°yÓA�Ø—‘˜gÔ&Ü×8Ò8¸×AÑAÜ—H’H˜W eÔ,Ø—‘Ô!ô $&§7¢7£9Ñ �ð&Ø#+§?¡?Ó#4°gÐ">�KØŸO™OÓ-¨w×8MÑ8MØ$ð&ñ &�Cä×.Ò.Ó0�CØ˜5¤4×#DÒ#DÓ#FÑF�DØ˜T 3˜KÑ'�DØÑ+ØÑ(˜Ü×-Ò-¨c¸ÓE‘Cô
 —H’H˜WÔ%Ø+2Ô(Ø,3Ô)Ø'*Ô$÷7 /÷E ˆZøðlÜ—H’H˜WÔ%Øûä—H’H˜WÕ%ú÷1 /Õ.ú÷E �ZúsQ   �AJ'Á2B-J'ÄBJÆ!BIÈ&(JÉJ'ÉI8É8I;É;JÊJÊ
J$	Ê J'Ê'
J5)r   r   r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r    r&   r%   r   r   r   r
   Ú__static_attributes__© r"   r   r   r   !   s&   † ò-ò"ò
(ò.ò#ò"õ:D+r"   r   )rU   c          
      óä  • U(       a¥  Ub  U[         R                  SS& Ub  U[         R                  SS& SU;   aI  UbF  S[        R                  " 5       l         [        R                  " U5        [        R                  " 5       ?U H  n [        U5        M     [        R                  " 5         [        R                  " 5         [        R                  " 5       u  px[        R                  " US5        [        R                  " US5        S n	[         R"                  U	[         R$                  [         R&                  0n
U
R)                  5        VVs0 s H  u  p¼U[         R                   " X¼5      _M     nnn[         R*                  " U5        0 n[,        R,                  " [,        R.                  U S9 n[0        R2                  " 5        nUR5                  5       [6        l        UR;                  U[0        R<                  5        UR;                  U[0        R<                  5        UR;                  U[0        R<                  5           UR?                  5        VVs/ s H  u  nnUR@                  PM     nnnU(       a  OM9  UU;   a(  [        RB                  " US5      S:X  d   S	5       e[D        eUU;   a²  [        RB                  " US
5          [        RF                  " S[        RH                  5      u  nnUS:X  a  OjURM                  US5      nUb:  [        RN                  " U5      n [Q        UU5        [        RT                  " U5        O[V        RX                  " SU-  5        Mš  UU;   Ga¢  UR[                  5       S    n[\        R^                  " U[`        S-   5      n[c        U5      [`        :”  a#  [e        SRg                  [c        U5      5      5      eUtnnnURU                  5         [        Rh                  " 5       nUS:X  aº  Sn URU                  5         URU                  5         UUXx/nURk                  URm                  5       5        [n        Rp                  " 5         [n        R:                  " [        Rr                  5        [u        UUUU5      n[n        R€                  " 5         [        R‚                  " U5        OG [Q        UU5        UUU'   [        RT                  " U5        U H  n[        RT                  " U5        M     SSS5        O GMÎ  ! [        R                  " 5       ?f = f! [         a     GM°  f = fs  snnf s  snnf ! [J         a     GMó  f = f! [R         a     GN6f = f! [v         aH    [         Rx                  " [         Rz                  " 5       6   [         R|                  R                  5          GN,f = f! [n        R€                  " 5         [        R‚                  " U5        f = f! [R         a     GN4f = f! , (       d  f       GN= f! [„         a*  nUR†                  [†        Rˆ                  :w  a  e  SnAGN5SnAff = f! , (       d  f       O= fSSS5        g! , (       d  f       g= f)zRun forkserver.Nr   TFc                  ó   • g r$   rr   )Ú_unuseds    r   Úsigchld_handlerÚmain.<locals>.sigchld_handlerÒ   s   € àr"   )r\   r   r"   zNot at EOF?i   éÿÿÿÿr   z.forkserver: waitpid returned unexpected pid %dzToo many ({0:n}) fds to send)EÚsysÚargvÚpathr   Úcurrent_processÚ_inheritingr   Úimport_main_pathÚ
__import__ÚImportErrorr	   Ú_flush_std_streamsÚ_close_stdinr)   rE   Úset_blockingÚsignalÚSIGCHLDÚSIGINTÚSIG_IGNÚitemsÚset_wakeup_fdrB   rC   Ú	selectorsÚDefaultSelectorÚgetsocknameÚ_forkserverr   ÚregisterÚ
EVENT_READÚselectÚfileobjÚreadÚ
SystemExitr+   rV   ÚChildProcessErrorÚpopÚwaitstatus_to_exitcodeÚwrite_signedÚBrokenPipeErrorr*   ÚwarningsÚwarnÚacceptr   Úrecvfdsr@   r?   ÚRuntimeErrorÚformatÚforkÚextendÚvaluesÚatexitÚ_clearÚ_exit_functionÚ
_serve_oneÚ	ExceptionÚ
excepthookÚexc_infoÚstderrÚflushÚ_run_exitfuncsÚ_exitÚOSErrorÚerrnoÚECONNABORTED)Úlistener_fdrg   ÚpreloadrT   rR   rU   ÚmodnameÚsig_rÚsig_wrv   ÚhandlersÚsigÚvalÚold_handlersÚ	pid_to_fdre   ÚselectorÚkeyÚeventsÚrfdsr`   ÚstsrK   Ú
returncodeÚsrH   rL   ÚcodeÚ
unused_fdsÚfdÚes                                  r   ÚmainrÅ   ´   s%  € ö ØÑØ"ŒC�H‰H‘QˆKØÑØ"ŒC�H‰H‘QˆKØ˜Ó  YÑ%:Ø48ŒG×#Ò#Ó%Ô1ð:Ü×&Ò& yÔ1ä×+Ò+Ó-Ð9ÛˆGðÜ˜7Ö#ñ ô 	×ÒÔ!ä×ÒÔä—7’7“9�L€EÜ‡O‚O�E˜5Ô!Ü‡O‚O�E˜5Ô!òô 	�‰˜ä�‰”v—~‘~ð	
€Hð '/§n¡nÔ&6ô8Ú&6™
˜ð œŸš sÓ0Ò0Ù&6ð ñ 8ô ×Ò˜Ôð €Iä	�Š”v—~‘~¨kÒ	:¸hÜ	×	"Ò	"Ô	$¨Ø*2×*>Ñ*>Ó*@ŒÔ'à×Ñ˜(¤I×$8Ñ$8Ô9Ø×Ñ˜'¤9×#7Ñ#7Ô8Ø×Ñ˜%¤×!5Ñ!5Ô6àðSØØ=E¿_¹_Ô=NÔOÒ=N©M¨S°&˜CŸKœKÑ=N�DÑOÞØñ ð
 ˜d“?äŸ7š7 7¨AÓ.°#Ó5ÐD°}ÓDÐ5Ü$Ð$à˜D“=ä—G’G˜E 5Ô)Øð"Ü')§z¢z°"´b·j±jÓ'A™H˜C ð  !›8Ø!Ø"+§-¡-°°TÓ":˜Ø"Ñ.Ü)+×)BÒ)BÀ3Ó)G˜Jð%Ü ,¨W°jÔ Aô ŸHšH WÕ-ô %ŸMšMð +>Ø@Cñ+Dô Eñ+ ð0 ˜tÔ#à!Ÿ™Ó*¨1Ò-°ä'×/Ò/°´>ÀAÑ3EÓF˜Ü˜s›8¤nÓ4Ü".Ø >× EÑ EÜ$'¨£Hó!.ó#/ð /ð 25Ð.˜ ¨3ØŸ™œ	Ü Ÿgšg›i˜Ø !›8à#$˜Dð/Ø (§¡Ô 0Ø (§¡Ô 0Ø.5°wÀÐ-M 
Ø *× 1Ñ 1°)×2BÑ2BÓ2DÔ EÜ &§¢¤Ü &§¢´×0CÑ0CÔ DÜ'1°'¸3Ø2<Ø2>ó(@ ô !'× 5Ò 5Ô 7Ü "§¢¨¥ð%Ü ,¨W°cÔ :ð .5˜I c™NÜŸHšH WÔ-Û&) Ü "§¢¨¦ñ '*÷M .Ð-ð $òO øôY ×+Ò+Ó-Ñ9ûô ó Ûðüó.8ùó( Pøô   1ó "Û!ð"ûô $3ó %â $ð%ûôD $-ó 3Ü #§¢´·²³Ñ ?Ü #§
¡
× 0Ñ 0× 2ð3ûô !'× 5Ò 5Ô 7Ü "§¢¨¥ûô
 $3ó %â $ð%ú÷C .Ö-ûôR ó Ø—7‘7œe×0Ñ0Ó0Øõ 1ûðú÷s 
%Õ	$ú÷ 
;×	:Ö	:úsD  ÁT Â	T'Å#T9Æ.Y!ÇA;YÉ XÉT?
É-AXË(UË/2XÌ"UÌ.AXÍ:BW>ÐBU(Ò,W>Ò:W-Ó:W>Ô XÔYÔT$Ô'
T6Ô5T6Ô?XÕ
UÕXÕUÕXÕ
U%Õ!XÕ$U%Õ%XÕ(AV:	Ö6V=Ö9V:	Ö:V=Ö=-W*	×*W>×-
W;	×7W>×:W;	×;W>×>
XØXØYØXØ
YØX?Ø9YØ?YÙYÙ
Y	ÙY!Ù!
Y/c                 óz  • [         R                  " S5        UR                  5        H  u  pE[         R                   " XE5        M     U H  n[        R                  " U5        M     Ut[
        l        [        R                  l	        [
        l
        [        R                  " U 5      n[        R                  " X5      nU$ )Nrx   )r„   r‰   rˆ   r)   r*   r�   r   r   Ú_resource_trackerÚ_fdr   Údupr   Ú_main)	rL   rH   rÂ   rµ   r¶   r·   rÃ   Úparent_sentinelrÁ   s	            r   r¥   r¥   D  s‡   € ä
×Ò˜ÔØ—N‘NÖ$‰ˆÜ�Š�cÖñ %ãˆÜ
�Š�Žñ ð
 %(ð"„[Ô%Ü×'Ñ'Ô+ÜÔ ô —f’f˜W“o€OÜ�;Š;�wÓ0€Dà€Kr"   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   )ÚSIGNED_STRUCTÚsizer?   r)   r’   ÚEOFErrorÚunpack)rÃ   rd   ÚlengthrÀ   s       r   Úread_signedrÒ   [  sq   € Ø€DÜ×Ñ€FÜ
ˆd‹)�fÓ
Ü�GŠG�B¤ T£Ñ*Ó+ˆÞÜÐ+Ó,Ð,Ø‰	ˆô	 ˆd‹)�fÕ
ô
 ×Ñ Ó% aÑ(Ð(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)   Úwriter�   )rÃ   ÚnÚmsgÚnbytess       r   r—   r—   e  sF   € Ü
×
Ñ
˜QÓ
€CÞ
Ü—’˜"Ó"ˆØ�Q‹;ÜÐ4Ó5Ð5Ø�'ˆlˆ÷	 Š#r"   )NN)!r¢   r®   r)   rŠ   r„   rB   Ústructry   r   r™   Ú r   r   Úcontextr   r   r   r	   Ú__all__r@   ÚStructrÍ   Úobjectr   rÅ   r¥   rÒ   r—   r�   r
   r   r   r   rr   r"   r   Ú<module>rß      s·   ðÛ Û Û 	Û Û Û Û Û 
Û Û å Ý Ý Ý Ý Ý ò%€ð €Ø—’˜cÓ"€ôM+�ô M+ðfMØöMò`ò.)òñ ‹l€Ø×+Ñ+€Ø×1Ñ1Ð Ø$×;Ñ;Ð Ø$×;Ñ;Ñ r"   