o
    i                  	   @   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   i/var/www/edux/Edux_v2/venv/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   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_child0   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   poll4   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   G   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?)r2   )	r   r%   killr'   signalSIGTERMProcessLookupErrorr(   r   r   r   r   r   	terminateP   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
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 )Ninit_main_moduleTz-m--process-name--pipe)      posixmp_tracker_argsr   r   )	fork_exec)envzlaunched python with pid z
 and cmd:
	getbuffergetvaluewb)!r	   _resource_trackergetfdr   r   r
   get_preparation_data_namegetattrr   dumpr%   piper   
executabler   strnamer   r    version_infor$   r?   r@   r   debugr0   hasattrfdopenwriter'   Finalizeclose)r   r"   
tracker_fdfp	prep_dataparent_rchild_wchild_rparent_w
cmd_pythonmp_tracker_fdr?   r'   methodfr   r   r   r   r!   Z   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   r^   r   DupFdr   r$   r%   r1   r/   r   r7   r!   staticmethodr`   r   r   r   r   r   %   s    
	
5__main__zCommand line parserr:   TzFile handle for the pipe)typerequiredhelpr9   z Identifier for debugging purpose)rd   defaultrf   rbzR

--------------------------------------------------------------------------------z failed with traceback: zP--------------------------------------------------------------------------------zQ
--------------------------------------------------------------------------------)0r%   r   r4   pickleior   multiprocessingr   r   multiprocessing.connectionr   multiprocessing.contextr    r   r	   r
   __all__r   r   r   argparseArgumentParserparseradd_argumentintrL   
parse_argsargsinfoexitcoderQ   rJ   from_parentcurrent_process_inheritingloadrW   preparer"   
_bootstrap	Exceptionprintprocess_name	traceback
format_excrT   exitr   r   r   r   <module>   sd   o





	