3
\· ã @ s˜ d dl Z d dlZd dlZd dlZd dlZddlmZmZmZ ddl m
Z
ddl mZ dgZdZ
ejdkoreed d
ƒZejjƒ jdƒZG dd„ deƒZdS )
é Né )Ú reductionÚget_spawning_popenÚset_spawning_popen)Úspawn)ÚutilÚPopeni Zwin32ÚfrozenFzpythonservice.exec @ s> e Zd ZdZdZdd„ Zdd„ Zddd „Zd
d„ Zdd
„ Z dS )r z@
Start a subprocess to run the code of a process object
r c C s t j|jƒ}tjd dƒ\}}tj|dƒ}t jtj ƒ |d�}dj
dd„ |D ƒƒ}t|ddd��´}y4tjt j
ƒ |d d d dd d d ƒ \}} }
}tj| ƒ W n tj|ƒ ‚ Y nX |
| _d | _|| _t|ƒ| _tj| tj| jfƒ t| ƒ ztj||ƒ tj||ƒ W d td ƒ X W d Q R X d S )
Nr )Z
parent_pidZpipe_handleú c s s | ]}d | V qdS )z"%s"N© )Ú.0Úxr r ú9/usr/lib64/python3.6/multiprocessing/popen_spawn_win32.pyú ) s z!Popen.__init__..ÚwbT)ÚclosefdF)r Zget_preparation_dataÚ_nameÚ_winapiZ
CreatePipeÚmsvcrtZopen_osfhandleZget_command_lineÚosÚgetpidÚjoinÚopenZ
CreateProcessZget_executableZCloseHandleÚpidÚ
returncodeÚ_handleÚintÚsentinelr ZFinalizer r Údump)ÚselfZprocess_objZ prep_dataZrhandleZwhandleZwfdÚcmdZto_childZhpZhtr Útidr r r Ú__init__ s2
zPopen.__init__c C s | t ƒ kst‚tj|| jƒS )N)r ÚAssertionErrorr Z duplicater )r Zhandler r r Úduplicate_for_childE s zPopen.duplicate_for_childNc C st | j d krn|d krtj}ntdt|d d ƒƒ}tjt| jƒ|ƒ}|tjkrntj| jƒ}|t krht
j }|| _ | j S )Nr iè g à?)r r ZINFINITEÚmaxr ZWaitForSingleObjectr Z
WAIT_OBJECT_0ZGetExitCodeProcessÚ TERMINATEÚsignalÚSIGTERM)r ÚtimeoutZmsecsÚresÚcoder r r ÚwaitI s
z
Popen.waitc C s | j dd�S )Nr )r) )r, )r r r r ÚpollY s z
Popen.pollc C sL | j d krHytjt| jƒtƒ W n& tk
rF | jdd�d krB‚ Y nX d S )Ng ð?)r) )r r ZTerminateProcessr r r&