a dP$@sddlZddlZddlZddlZddlmZmZddlmZddlm Z ddlm Z gdZ ej dkrpd Z d Zneed d Z ejd Zerejejd anejad dZddZddZddZddZd'ddZddZddZddZgZ dd Z!d!d"Z"d#d$Z#d%d&Z$dS)(N)get_start_methodset_start_method)process) reduction)util)_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs|adSN _python_exe)Zexer:/opt/alt/python39/lib64/python3.9/multiprocessing/spawn.pyr )sr cCstSrrrrrrr -sr cCs$t|dkr|ddkrdSdSdS)Nr--multiprocessing-forkTF)len)argvrrr is_forking4srcCshttjrdi}tjddD]0}|d\}}|dkr@d||<qt|||<qtfi|tdS)Nr=None)rsysrsplitint spawn_mainexit)kwdsargnamevaluerrrr >s  r cKshttddr(tjdgdd|DSd}|ddd |D;}t}tg|d |dgSdS) NrFrcSsg|] }d|qS)%s=%rr.0itemrrr Tz$get_command_line..zWr+z#get_command_line..z-c)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)r"progZoptsrrrr Ns r c Cstjdkr`ddl}ddl}|dur:||j|jBd|}nd}tj||d}| |t j }|}n"ddl m } || j_|}t |}t||} t| dS)NrrF)source_processr)resource_tracker)rplatformmsvcrt_winapiZ OpenProcessZ SYNCHRONIZEZPROCESS_DUP_HANDLErZ duplicateZopen_osfhandleosO_RDONLYr3Z_resource_trackerZ_fdduprr!) Z pipe_handleZ parent_pidZ tracker_fdr5r6r2Z new_handlefdparent_sentinelr3Zexitcoderrrr \s(     r c Cs|tj|dddR}dt_z,tj|}t|tj|}Wt`n t`0Wdn1sh0Y| |S)NrbT)closefd) r7fdopenrcurrent_process _inheritingrpickleloadprepare _bootstrap)r;r<Z from_parentZpreparation_dataselfrrrrxs  2rcCsttddrtddS)NrAFa 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_mainsrHcCstttjtjd}tjdur2tj|d<t j }z| d}Wnt y\Yn 0tj||<|j||t jtjttdt jd}t|jdd}|dur||d<nft jdkststst|d d}|durtj |stjdurtj tj|}tj ||d <|S) N) log_to_stderrauthkey log_levelr9)r$sys_pathsys_argvorig_dirdir start_method__main__r$init_main_from_namer__file__init_main_from_path)rHdictrZ_log_to_stderrrr@rJZ_loggerZgetEffectiveLevelrpathcopyindex ValueError ORIGINAL_DIRupdaterr7getcwdrmodulesr-__spec__r4WINEXE WINSERVICEisabsr0normpath)r$drLi main_moduleZ main_mod_name main_pathrrrr sD        r cCsd|vr|dt_d|vr,|dt_d|vrD|drDtd|vr^t|dd|vrp|dt_ d|vr|dt_ d|vrt |dd|vr|dt_ d |vrt|d d d d |vrt|d nd |vrt|d dS)Nr$rJrIrKrLrMrOrNrPT)ZforcerRrT)rr@r$rJrrIZ get_loggerZsetLevelrrVrr7chdirrZr_fixup_main_from_name_fixup_main_from_path)datarrrrDs,   rDcCs~tjd}|dks|dr dSt|jdd|kr6dSt|td}t j |ddd}|j ||tjd<tjd<dS)NrQz .__main__r$ __mp_main__T)run_nameZ alter_sys) rr]endswithr-r^old_main_modulesappendtypes ModuleTyperunpyZ run_module__dict__r[)Zmod_name current_mainre main_contentrrrrhs    rhcCstjd}tjtj|d}|dkr.dSt|dd|krBdSt|t d}t j |dd}|j ||tjd<tjd<dS)NrQrZipythonrSrk)rl)rr]r7rVsplitextbasenamer-rnrorprqrrZrun_pathrsr[)rfrtZ main_namererurrrri s    ricCs t|dSr)ri)rfrrrr%sr)NN)%r7rrrrpr9rrrcontextrr__all__r4r_r`r-r.lowerrmrVr0 exec_prefixrr r rr r r rrHr rnrDrhrirrrrr s<        2&