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__cCstj||jƒS)N)rZ 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