o
    ^Zh                  	   @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZ ddlmZmZmZ dgZG d	d
 d
ZG dd dZedkrd dlZedZejdeddd ejdeddd e Zi ZdZzuz=e ej d(Z!de" _#ze$e!Z%e&e% e$e!Z'W e" `#ne" `#w W d   n1 sw   Y  e'( ZW n' e)y   e*d e*ej+ d e*d d dl,Z,e*e,-  e*d Y nw W e!dure!.  e/e dS e!dure!.  e/e w dS )    N)BytesIO)utilprocess)wait)set_spawning_popen   )	reductionresource_trackerspawnPopenc                   @   s   e Zd Zdd Zdd ZdS )_DupFdc                 C   s   t || _d S N)r   _mk_inheritablefdselfr    r   ]/var/www/auris/lib/python3.10/site-packages/joblib/externals/loky/backend/popen_loky_posix.py__init__   s   z_DupFd.__init__c                 C   s   | j S r   )r   r   r   r   r   detach   s   z_DupFd.detachN)__name__
__module____qualname__r   r   r   r   r   r   r      s    r   c                   @   sX   e Zd ZdZeZdd Zdd Zej	fddZ
dd	d
Zdd Zdd Zedd ZdS )r   Zlokyc                 C   s.   t j  t j  d | _g | _| | d S r   )sysstdoutflushstderr
returncode_fds_launch)r   process_objr   r   r   r   +   s
   

zPopen.__init__c                 C   s   | j | t|S r   )r   appendr   r   r   r   r   r   duplicate_for_child2   s   
zPopen.duplicate_for_childc                 C   s   | j d u r>	 zt| j|\}}W n
 ty   Y d S w 	 || jkr>t|r1t| | _ | j S t|s8J t|| _ | j S r   )	r   oswaitpidpidOSErrorWIFSIGNALEDWTERMSIG	WIFEXITEDWEXITSTATUS)r   flagr&   stsr   r   r   poll6   s   


z
Popen.pollNc                 C   sD   | j d u r|d urt| jg|sd S | |dkrtjS dS | j S )Ng        r   )r   r   sentinelr.   r$   WNOHANG)r   timeoutr   r   r   r   I   s   
z
Popen.waitc                 C   s^   | j d u r-zt| jtj W d S  ty   Y d S  ty,   | jddd u r) Y d S w d S )Ng?)r1   )	r   r$   killr&   signalSIGTERMProcessLookupErrorr'   r   r   r   r   r   	terminateR   s   
zPopen.terminatec                 C   s  t j }t }t|  zt|jt|dd}t	
|| t	
|| W td  ntd  w zt \}}t \}}tjg}	|	d| jg7 }	|	dt|jg7 }	|	dtt	|g7 }	t	| t	| |  j|||g7  _tjdkrtjdkr|d }
| |
 d	d
lm} ||	| j|jd}td| d|	  || _d}t||sd}t|d}|t||  W d    n1 sw   Y  || _W |d urt| tj |f ||fD ]}|d urt | qd S |d urt| tj |f ||fD ]}|d urt | qw )NZinit_main_moduleTz-m--process-name--pipe)      posixmp_tracker_fdr   )	fork_exec)envzlaunched python with pid z
 and cmd:
	getbuffergetvaluewb)!r	   Z_resource_trackerZgetfdr   r   r
   Zget_preparation_data_namegetattrr   dumpr$   piper   
executabler   strnamer   r   version_infor#   r=   r>   r   debugr/   hasattrfdopenwriter&   ZFinalizeclose)r   r!   Z
tracker_fdfp	prep_dataZparent_rZchild_wZchild_rZparent_wZ
cmd_pythonr<   r=   r&   methodfr   r   r   r   r    \   sf   








zPopen._launchc                   C   s   dS )NTr   r   r   r   r   thread_is_spawning   s   zPopen.thread_is_spawningr   )r   r   r   rQ   r   ZDupFdr   r#   r$   r0   r.   r   r6   r    staticmethodrS   r   r   r   r   r   '   s    
	
7__main__zCommand line parserr8   TzFile handle for the pipe)typerequiredhelpr7   z Identifier for debugging purpose)rV   defaultrX   rbzR

--------------------------------------------------------------------------------z failed with traceback: zP--------------------------------------------------------------------------------zQ
--------------------------------------------------------------------------------)0r$   r   r3   pickleior   multiprocessingr   r   Zmultiprocessing.connectionr   Zmultiprocessing.contextr    r   r	   r
   __all__r   r   r   argparseArgumentParserparseradd_argumentintrG   
parse_argsargsinfoexitcoderL   rE   Zfrom_parentcurrent_processZ_inheritingloadrP   preparer!   
_bootstrap	ExceptionprintZprocess_name	traceback
format_excrN   exitr   r   r   r   <module>   sj   q



		