o ?Ogn/ã@súddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZddl mZddl mZgd ¢Zd Ze d ¡ZGd d „d eƒZddd„Zdd„Zdd„Zdd„ZeƒZejZejZejZejZdS)éNé)Ú connection)Úprocess)Ú reduction)Úresource_tracker)Úspawn)Úutil)Úensure_runningÚget_inherited_fdsÚconnect_to_new_processÚset_forkserver_preloadéÚqc@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)Ú ForkServercCs.d|_d|_d|_d|_t ¡|_dg|_dS)NÚ__main__)Ú_forkserver_addressÚ_forkserver_alive_fdÚ_forkserver_pidÚ_inherited_fdsÚ threadingZLockÚ_lockÚ_preload_modules©Úself©rúA/opt/alt/python310/lib64/python3.10/multiprocessing/forkserver.pyÚ__init__"s   zForkServer.__init__cCs4|j | ¡WdƒdS1swYdS©N)rÚ_stop_unlockedrrrrÚ_stop*s "ÿzForkServer._stopcCsV|jdurdSt |j¡d|_t |jd¡d|_t |j¡s&t |j¡d|_dS)Nr) rÚosÚcloserÚwaitpidrÚis_abstract_socket_namespacerÚunlinkrrrrr/s     zForkServer._stop_unlockedcCs&tdd„|jDƒƒstdƒ‚||_dS)z>Set list of module names to try to load in forkserver process.css|] }t|ƒtuVqdSr)ÚtypeÚstr)Ú.0ÚmodrrrÚ @s€z4ForkServer.set_forkserver_preload..z&module_names must be a list of stringsN)ÚallrÚ TypeError)rZ modules_namesrrrr >s z!ForkServer.set_forkserver_preloadcCs|jS)z”Return list of fds inherited from parent process. This returns None if the current process was not started by fork server. )rrrrrr DszForkServer.get_inherited_fdsc Csð| ¡t|ƒdtkrtdƒ‚t tj¡X}| |j¡t  ¡\}}t  ¡\}}|||j t   ¡g}||7}z,zt  ||¡||fWWt |¡t |¡WdƒSt |¡t |¡‚t |¡t |¡w1sqwYdS)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_UNIXZconnectrr ÚpiperrZgetfdrZsendfdsr!)rÚfdsZclientZparent_rÚchild_wÚchild_rZparent_wZallfdsrrrr Ls0   ÿ    ð    ðz!ForkServer.connect_to_new_processc sÐ|jÛt ¡|jdur1t |jtj¡\}}|s" WdƒdSt |j¡d|_ d|_d|_d}|j rKddh‰t   d¡}‡fdd„|  ¡Dƒ}ni}t tj¡s}t d¡}| |¡t |¡sit |d ¡| ¡t ¡\}}z„sz-ForkServer.ensure_running..r1i€z-c)rrr rr r"ÚWNOHANGr!rrrrZget_preparation_dataÚitemsr0r1rZarbitrary_addressZbindrr#ÚchmodZlistenr2ÚfilenoZget_executableZ_args_from_interpreter_flagsZspawnv_passfds) rÚpidZstatusÚcmdÚdataÚlistenerZaddressÚalive_rZalive_wZ fds_to_passZexeÚargsrr;rr isZ ù        ÿ  ýçè"èzForkServer.ensure_runningN) Ú__name__Ú __module__Ú __qualname__rrrr r r r rrrrr s rc Csè|r4d|vr |dur dt ¡_z t |¡Wt ¡`nt ¡`w|D]}zt|ƒWq"ty3Yq"wt ¡t   ¡\}}t   |d¡t   |d¡dd„}t j |t jt ji} dd„|  ¡Dƒ} t  |¡i} tjtj|d y} t ¡b} |  ¡t_|  | tj¡|  |tj¡|  |tj¡ z( d d „|  ¡Dƒ}|r¡nq•||vr´t  |d ¡d ks²Jdƒ‚t‚||vr t  |d¡ z t  dt j¡\}}Wn t yÔYn5w|dkrÚn/|  !|d¡}|durt  "|¡}zt#||ƒWn t$yúYnwt  %|¡nt& 'd|¡qÀ| |vrº|  (¡d}t) *|t+d ¡}t,|ƒt+kr-t-d .t,|ƒ¡ƒ‚|^}}}| %¡t  /¡}|dkr„d }z.sigchld_handlercSsi|] \}}|t ||¡“qSr)Úsignal)r'ÚsigÚvalrrrr<Æsÿzmain..)r@cSsg|]\}}|j‘qSr)Zfileobj)r'ÚkeyZeventsrrrÚ Úszmain..róz Not at EOF?iéÿÿÿÿrz.forkserver: waitpid returned unexpected pid %dzToo many ({0:n}) fds to send)=rZcurrent_processZ _inheritingrZimport_main_pathÚ __import__Ú ImportErrorrZ _close_stdinr r2Ú set_blockingrKÚSIGCHLDÚSIGINTÚSIG_IGNr>Ú set_wakeup_fdr0r1Ú selectorsZDefaultSelectorZ getsocknameÚ _forkserverrÚregisterZ EVENT_READZselectÚreadÚ SystemExitr"r=ÚChildProcessErrorÚpopÚwaitstatus_to_exitcodeÚ write_signedÚBrokenPipeErrorr!ÚwarningsÚwarnZacceptrZrecvfdsr.r-Ú RuntimeErrorÚformatÚforkÚextendÚvaluesÚ _serve_oneÚ ExceptionÚsysÚ excepthookÚexc_infoÚstderrÚflushÚ_exitÚOSErrorÚerrnoZ ECONNABORTED)Z listener_fdrEZpreloadr6r7ÚmodnameZsig_rZsig_wrJÚhandlersZ old_handlersZ pid_to_fdrDZselectorZrfdsrAÚstsr4Ú returncodeÚsr3r5ÚcodeÚ unused_fdsÚfdÚerrrÚmain§sæ    ÿ   üÿ ÿ ý   ÿ    þ ÿë ÿÿ   þþ€þ €Ü€& ÿ€ÿ±8ør}c Csht d¡| ¡D] \}}t ||¡q |D]}t |¡q|^t_tj_ t_ t  |¡}t   ||¡}|S)NrQ)rKrXr>r r!rZrrZ_resource_trackerZ_fdrÚduprZ_main) r5r3rzrurLrMr{Zparent_sentinelryrrrrj+s  þ  rjcCsXd}tj}t|ƒ|kr%t ||t|ƒ¡}|stdƒ‚||7}t|ƒ|ks t |¡dS)NrPzunexpected EOFr)Ú SIGNED_STRUCTÚsizer-r r\ÚEOFErrorZunpack)r{rCZlengthrxrrrÚ read_signedBs  ür‚cCsBt |¡}|rt ||¡}|dkrtdƒ‚||d…}|sdSdS)Nrzshould not get here)rZpackr Úwritere)r{ÚnÚmsgÚnbytesrrrraLs    üra)NN) rsr rYrKr0ZstructrlrrcÚrrÚcontextrrrrÚ__all__r.ZStructrÚobjectrr}rjr‚rarZr r r r rrrrÚs<