U e5dP$ã@s$ddlZddlZddlZddlZddlmZmZddlmZddlm Z ddlm Z ddd d d d d gZ ej dkrzdZ dZneeddƒZ ej ¡ d¡Zer¬ej ejd¡anejadd „Zdd „Zdd„Zdd„Zdd „Zd&dd„Zdd„Zdd„Zdd „ZgZ dd „Z!d!d"„Z"d#d$„Z#d%d „Z$dS)'éNé)Úget_start_methodÚset_start_method)Úprocess)Ú reduction)ÚutilÚ_mainÚfreeze_supportÚset_executableÚget_executableÚget_preparation_dataÚget_command_lineÚimport_main_pathÚwin32FÚfrozenzpythonservice.exez python.execCs|adS©N©Ú _python_exe)Zexe©rú-/usr/lib64/python3.8/multiprocessing/spawn.pyr )scCstSrrrrrrr -scCs$t|ƒdkr|ddkrdSdSdS)z= Return whether commandline indicates we are forking érú--multiprocessing-forkTFN)Úlen)ÚargvrrrÚ is_forking4srcCsdttjƒr`i}tjdd…D]0}| d¡\}}|dkr@d||<qt|ƒ||<qtf|Žt ¡dS)zE Run code for process object if this in not the main process rNú=ÚNone)rÚsysrÚsplitÚintÚ spawn_mainÚexit)ÚkwdsÚargÚnameÚvaluerrrr >s   cKshttddƒr(tjdgdd„| ¡DƒSd}|d dd „| ¡Dƒ¡;}t ¡}tg|d |dgSd S) zJ Returns prefix of command line used for spawning a child process rFrcSsg|] }d|‘qS)ú%s=%rr©Ú.0ÚitemrrrÚ Tsz$get_command_line..zWsz#get_command_line..z-cN)ÚgetattrrÚ executableÚitemsÚjoinrZ_args_from_interpreter_flagsr)r"ÚprogZoptsrrrr Ns ÿc Csštjdkr`ddl}ddl}|dk r:| |j|jBd|¡}nd}tj||d�}|  |t j ¡}|}n"ddl m } || j_|}t  |¡}t||ƒ} t | ¡dS)z7 Run code specified by data received over pipe rrNF)Úsource_processr)Úresource_tracker)rÚplatformÚmsvcrtÚ_winapiZ OpenProcessZ SYNCHRONIZEZPROCESS_DUP_HANDLErZ duplicateZopen_osfhandleÚosÚO_RDONLYÚr2Z_resource_trackerZ_fdÚduprr!) Z pipe_handleZ parent_pidZ tracker_fdr4r5r1Z new_handleÚfdÚparent_sentinelr2Zexitcoderrrr \s*  þÿ   r c Cs`tj|ddd��@}dt ¡_z$tj |¡}t|ƒtj |¡}W5t ¡`XW5QRX|  |¡S)NÚrbT)Úclosefd) r6ÚfdopenrÚcurrent_processÚ _inheritingrÚpickleÚloadÚprepareÚ _bootstrap)r:r;Z from_parentZpreparation_dataÚselfrrrrxs  cCstt ¡ddƒrtdƒ‚dS)Nr@Fa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r,rr?Ú RuntimeErrorrrrrÚ_check_not_importing_main„srGcCstƒttjt ¡jd�}tjdk r2tj ¡|d<t j   ¡}z|  d¡}Wnt k r^Yn Xtj||<|j||t jtjt ¡tƒd�t jd}t|jddƒ}|dk r´||d<nft jd ksÊt�st�st|d dƒ}|dk �rtj  |¡�s tjdk �r tj  tj|¡}tj  |¡|d <|S) zM Return info about parent needed by child to unpickle process object )Ú log_to_stderrÚauthkeyNÚ log_levelr8)r$Úsys_pathÚsys_argvÚorig_dirÚdirÚ start_methodÚ__main__r$Úinit_main_from_namerÚ__file__Úinit_main_from_path)rGÚdictrZ_log_to_stderrrr?rIZ_loggerZgetEffectiveLevelrÚpathÚcopyÚindexÚ ValueErrorÚ ORIGINAL_DIRÚupdaterr6ÚgetcwdrÚmodulesr,Ú__spec__r3ÚWINEXEÚ WINSERVICEÚisabsr/Únormpath)r$ÚdrKÚiÚ main_moduleZ main_mod_nameÚ main_pathrrrr –sDþ   ú    ÿcCsðd|kr|dt ¡_d|kr,|dt ¡_d|krD|drDt ¡d|kr^t ¡ |d¡d|krp|dt_ d|kr‚|dt_ d|kr˜t   |d¡d|krª|dt_ d |krÂt|d d d �d |krØt|d ƒnd |krìt|d ƒdS)zE Try to get current process ready to unpickle process object r$rIrHrJrKrLrNrMrOT)ZforcerQrSN)rr?r$rIrrHZ get_loggerZsetLevelrrUrr6ÚchdirrYrÚ_fixup_main_from_nameÚ_fixup_main_from_path)ÚdatarrrrCÊs,   rCcCs~tjd}|dks| d¡r dSt|jddƒ|kr6dSt |¡t d¡}t j |ddd�}|j   |¡|tjd<tjd<dS)NrPz .__main__r$Ú __mp_main__T)Úrun_nameZ alter_sys) rr\Úendswithr,r]Úold_main_modulesÚappendÚtypesÚ ModuleTypeÚrunpyZ run_moduleÚ__dict__rZ)Zmod_nameÚ current_mainrdÚ main_contentrrrrgðs   þ rgcCsˆtjd}tj tj |¡¡d}|dkr.dSt|ddƒ|krBdSt |¡t   d¡}t j |dd�}|j  |¡|tjd<tjd<dS)NrPrZipythonrRrj)rk)rr\r6rUÚsplitextÚbasenamer,rmrnrorprqZrun_pathrrrZ)rersZ main_namerdrtrrrrh s   ÿ rhcCs t|ƒdS)z< Set sys.modules['__main__'] to module at main_path N)rh)rerrrr%s)NN)%r6rrqror8rrrÚcontextrrÚ__all__r3r^r_r,r-ÚlowerrlrUr/Ú exec_prefixrr r rr r r rrGr rmrCrgrhrrrrrÚ sD   ÿ     2&