3 \· ã@s˜ddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d ƒZejjƒjd ƒZGd d„deƒZdS) éNé)Ú reductionÚget_spawning_popenÚset_spawning_popen)Úspawn)ÚutilÚPopeniZwin32ÚfrozenFzpythonservice.exec@s>eZdZdZdZdd„Zdd„Zddd „Zd d „Zd d „Z dS)rz@ Start a subprocess to run the code of a process object rc Cstj|jƒ}tjddƒ\}}tj|dƒ}tjtj ƒ|d�}dj dd„|Dƒƒ}t |ddd��´}y4tj tj ƒ|ddd ddddƒ \}} } } tj| ƒWntj|ƒ‚YnX| |_d|_||_t|ƒ|_tj|tj|jfƒt|ƒztj||ƒtj||ƒWdtdƒXWdQRXdS) Nr)Z parent_pidZ pipe_handleú css|]}d|VqdS)z"%s"N©)Ú.0Úxr r ú9/usr/lib64/python3.6/multiprocessing/popen_spawn_win32.pyú )sz!Popen.__init__..ÚwbT)ÚclosefdF)rZget_preparation_dataÚ_nameÚ_winapiZ CreatePipeÚmsvcrtZopen_osfhandleZget_command_lineÚosÚgetpidÚjoinÚopenZ CreateProcessZget_executableZ CloseHandleÚpidÚ returncodeÚ_handleÚintÚsentinelrZFinalizerrÚdump) ÚselfZ process_objZ prep_dataZrhandleZwhandleZwfdÚcmdZto_childZhpZhtrÚtidr r rÚ__init__ s2      zPopen.__init__cCs|tƒkst‚tj||jƒS)N)rÚAssertionErrorrZ duplicater)rZhandler r rÚduplicate_for_childEszPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|ddƒƒ}tjt|jƒ|ƒ}|tjkrntj|jƒ}|t krht j }||_|jS)Nriègà?) rrZINFINITEÚmaxrZWaitForSingleObjectrZ WAIT_OBJECT_0ZGetExitCodeProcessÚ TERMINATEÚsignalÚSIGTERM)rÚtimeoutZmsecsÚresÚcoder r rÚwaitIs   z Popen.waitcCs |jdd�S)Nr)r))r,)rr r rÚpollYsz Popen.pollc CsL|jdkrHytjt|jƒtƒWn&tk rF|jdd�dkrB‚YnXdS)Ngð?)r))rrZTerminateProcessrrr&ÚOSErrorr,)rr r rÚ terminate\s  zPopen.terminate)N) Ú__name__Ú __module__Ú __qualname__Ú__doc__Úmethodr"r$r,r-r/r r r rrs% )rrr'ÚsysrÚcontextrrrÚrrÚ__all__r&ÚplatformÚgetattrZWINEXEÚ executableÚlowerÚendswithZ WINSERVICEÚobjectrr r r rÚs