<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    ifzn                     @   s  d Z ddlZddlZddlmZ ddlZddlmZ ddlZddl	Zddl
mZ ddlZddlZddlmZ ddlZddlZddlZe ZdaG dd	 d	Zd
d ZdZdZG dd deZG dd dZdd ZG dd deZG dd deZ G dd deZ!G dd deZ"dd Z#dd Z$d0d d!Z%d"d# Z&d$d% Z'd&d' Z(da)da*d(d) Z+d*d+ Z,G d,d- d-ej-Z.G d.d/ d/ej/Z0e1e dS )1z"Brian Quinlan (brian@sweetapp.com)    N)_base)Full)Queue)partialFc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_ThreadWakeupc                 C   s   t jdd\| _| _d S )NF)Zduplex)mpZPipe_reader_writerself r   ?/opt/alt/python38/lib64/python3.8/concurrent/futures/process.py__init__R   s    z_ThreadWakeup.__init__c                 C   s   | j   | j  d S N)r	   closer   r
   r   r   r   r   U   s    
z_ThreadWakeup.closec                 C   s   | j d d S )N    )r	   Z
send_bytesr
   r   r   r   wakeupY   s    z_ThreadWakeup.wakeupc                 C   s   | j  r| j   q d S r   )r   ZpollZ
recv_bytesr
   r   r   r   clear\   s    
z_ThreadWakeup.clearN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   Q   s   r   c                  C   s@   da tt } | D ]\}}|  q| D ]\}}|  q*d S NT)_global_shutdownlist_threads_wakeupsitemsr   join)r   _thread_wakeuptr   r   r   _python_exita   s    
r       =   c                   @   s   e Zd Zdd Zdd ZdS )_RemoteTracebackc                 C   s
   || _ d S r   tb)r   r%   r   r   r   r   z   s    z_RemoteTraceback.__init__c                 C   s   | j S r   r$   r
   r   r   r   __str__|   s    z_RemoteTraceback.__str__N)r   r   r   r   r&   r   r   r   r   r#   y   s   r#   c                   @   s   e Zd Zdd Zdd ZdS )_ExceptionWithTracebackc                 C   s0   t t|||}d|}|| _d| | _d S )N z

"""
%s""")	tracebackformat_exceptiontyper   excr%   )r   r,   r%   r   r   r   r      s    
z _ExceptionWithTraceback.__init__c                 C   s   t | j| jffS r   )_rebuild_excr,   r%   r
   r   r   r   
__reduce__   s    z"_ExceptionWithTraceback.__reduce__N)r   r   r   r   r.   r   r   r   r   r'      s   r'   c                 C   s   t || _| S r   )r#   	__cause__)r,   r%   r   r   r   r-      s    
r-   c                   @   s   e Zd Zdd ZdS )	_WorkItemc                 C   s   || _ || _|| _|| _d S r   )futurefnargskwargs)r   r1   r2   r3   r4   r   r   r   r      s    z_WorkItem.__init__Nr   r   r   r   r   r   r   r   r0      s   r0   c                   @   s   e Zd ZdddZdS )_ResultItemNc                 C   s   || _ || _|| _d S r   )work_id	exceptionresult)r   r7   r8   r9   r   r   r   r      s    z_ResultItem.__init__)NNr5   r   r   r   r   r6      s   r6   c                   @   s   e Zd Zdd ZdS )	_CallItemc                 C   s   || _ || _|| _|| _d S r   )r7   r2   r3   r4   )r   r7   r2   r3   r4   r   r   r   r      s    z_CallItem.__init__Nr5   r   r   r   r   r:      s   r:   c                       s*   e Zd Zd fdd	Z fddZ  ZS )
_SafeQueuer   c                   s   || _ t j||d d S )N)ctx)pending_work_itemssuperr   )r   max_sizer<   r=   	__class__r   r   r      s    z_SafeQueue.__init__c                    sl   t |trZtt|||j}tdd||_	| j
|jd }|d k	rh|j| nt || d S )Nz

"""
{}"""r(   )
isinstancer:   r)   r*   r+   __traceback__r#   formatr   r/   r=   popr7   r1   set_exceptionr>   _on_queue_feeder_error)r   eobjr%   	work_itemr@   r   r   rG      s    
z!_SafeQueue._on_queue_feeder_error)r   )r   r   r   r   rG   __classcell__r   r   r@   r   r;      s   r;   c                 g   s,   t | }tt|| }|s d S |V  qd S r   )ziptuple	itertoolsislice)	chunksize	iterablesitchunkr   r   r   _get_chunks   s
    rT   c                    s    fdd|D S )Nc                    s   g | ]} | qS r   r   ).0r3   r2   r   r   
<listcomp>   s     z"_process_chunk.<locals>.<listcomp>r   )r2   rS   r   rV   r   _process_chunk   s    	rX   c              
   C   s^   z|  t|||d W n@ tk
rX } z"t||j}|  t||d W 5 d }~X Y nX d S )N)r9   r8   r8   )putr6   BaseExceptionr'   rC   )result_queuer7   r9   r8   rH   r,   r   r   r   _sendback_result   s    
r]   c              
   C   s   |d k	r<z||  W n& t k
r:   tjjddd Y d S X | jdd}|d krb|t  d S z|j|j	|j
}W n> t k
r } z t||j}t||j|d W 5 d }~X Y nX t||j|d ~~q<d S )NzException in initializer:T)exc_infoblockrY   )r9   )r[   r   ZLOGGERZcriticalgetrZ   osgetpidr2   r3   r4   r'   rC   r]   r7   )
call_queuer\   initializerinitargsZ	call_itemrrH   r,   r   r   r   _process_worker   s$    "rh   c                 C   sv   |  rd S z|jdd}W n tjk
r4   Y d S X | | }|j rh|jt||j|j	|j
dd q | |= q q d S )NFr_   T)Zfullra   queueZEmptyr1   Zset_running_or_notify_cancelrZ   r:   r2   r3   r4   )r=   Zwork_idsrd   r7   rJ   r   r   r   _add_call_item_to_queue   s"    
rj   c              
      s>  d fdd} fdd}|j }	|j }
|	|
g}t||  dd  D }tj|| }d }d}|	|krz|	 }d}W q tk
r } zt	t
|||j}W 5 d }~X Y qX n|
|krd}d }|  |rl|  d k	rd	_d_d td
}|d k	r tdd| d|_| D ]\}}|j| ~q(|   D ]}|  qR|  d S t|tr|}|  s|  d S nL|d k	r||jd }|d k	r|jr|j|j n|j|j ~~|  | r4z&d k	rd_|s|  W d S W n tk
r2   Y nX d q2d S )Nc                      s   t p d kp jS r   )r   _shutdown_threadr   )executorr   r   shutting_down@  s    z/_queue_management_worker.<locals>.shutting_downc               	      s   t dd  D } | }d}||k r| dkrt|| D ]6}z d  |d7 }W q: tk
rn   Y  qrY q:X q:t dd  D } q    D ]}|  qd S )Nc                 s   s   | ]}|  V  qd S r   Zis_aliverU   pr   r   r   	<genexpr>F  s     zD_queue_management_worker.<locals>.shutdown_worker.<locals>.<genexpr>r   r!   c                 s   s   | ]}|  V  qd S r   rn   ro   r   r   r   rq   R  s     )sumvaluesrangeZ
put_nowaitr   r   r   )Zn_children_aliveZn_children_to_stopZn_sentinels_sentirp   )rd   	processesr   r   shutdown_workerD  s    
z1_queue_management_worker.<locals>.shutdown_workerc                 S   s   g | ]
}|j qS r   )sentinelro   r   r   r   rW   i  s     z,_queue_management_worker.<locals>.<listcomp>TFzKA child process terminated abruptly, the process pool is not usable anymorez^A process in the process pool was terminated abruptly while the future was running or pending.z
'''
r(   z''')r   rj   rs   r   Z
connectionwaitZrecvr[   r)   r*   r+   rC   r   _brokenrk   BrokenProcessPoolr#   r   r/   r   r1   rF   Z	terminaterB   intrE   r7   r8   Z
set_resultr9   r   )Zexecutor_referencerv   r=   Zwork_ids_queuerd   r\   r   rm   rw   Zresult_readerZwakeup_readerZreadersZworker_sentinelsZreadycauseZ	is_brokenZresult_itemrH   Zbper7   rJ   rp   r   )rd   rl   rv   r   _queue_management_worker"  s    	(





r~   c               	   C   sj   t rtrttda ztd} W n ttfk
r<   Y d S X | dkrJd S | dkrVd S d|  attd S )NTSC_SEM_NSEMS_MAX   z@system provides too few semaphores (%d available, 256 necessary))_system_limits_checked_system_limitedNotImplementedErrorrb   sysconfAttributeError
ValueError)Z	nsems_maxr   r   r   _check_system_limits  s     r   c                 c   s&   | D ]}|   |r| V  qqd S r   )reverserE   )iterableZelementr   r   r   _chain_from_iterable_of_lists  s    r   c                   @   s   e Zd ZdS )r{   N)r   r   r   r   r   r   r   r{     s   r{   c                       st   e Zd ZdddZdd Zdd Zd	d
 Zejjj	e_	ejjj
e_
ddd fdd
ZdddZejjj
e_
  ZS )ProcessPoolExecutorNr   c                 C   s  t   |d kr6t pd| _tjdkrntt| j| _n8|dkrHtdn tjdkrh|tkrhtdt || _|d kr~t	
 }|| _|d k	rt|std|| _|| _d | _i | _d| _t | _d| _d| _i | _| jt }t|| j| jd| _d	| j_| | _t  | _!t" | _#d S )
Nr!   Zwin32r   z"max_workers must be greater than 0zmax_workers must be <= zinitializer must be a callableF)r?   r<   r=   T)$r   rb   	cpu_count_max_workerssysplatformmin_MAX_WINDOWS_WORKERSr   r   Zget_context_mp_contextcallable	TypeError_initializer	_initargs_queue_management_thread
_processesrk   	threadingZLock_shutdown_lockrz   _queue_count_pending_work_itemsEXTRA_QUEUED_CALLSr;   _call_queueZ_ignore_epipeZSimpleQueue_result_queueri   r   	_work_idsr   _queue_management_thread_wakeup)r   Zmax_workersZ
mp_contextre   rf   Z
queue_sizer   r   r   r     sP    




 

zProcessPoolExecutor.__init__c              	   C   sv   | j d krr| jfdd}|   tjtt| || j| j	| j
| j| j| jfdd| _ d| j _| j   | jt| j < d S )Nc                 S   s   t jd |  d S )Nz?Executor collected: triggering callback for QueueManager wakeup)r   utildebugr   )r   r   r   r   r   
weakref_cbB  s    zFProcessPoolExecutor._start_queue_management_thread.<locals>.weakref_cbZQueueManagerThread)targetr3   nameT)r   r   _adjust_process_countr   ZThreadr~   weakrefrefr   r   r   r   r   Zdaemonstartr   )r   r   r   r   r   _start_queue_management_thread=  s(    




z2ProcessPoolExecutor._start_queue_management_threadc                 C   sP   t t| j| jD ]8}| jjt| j| j| j	| j
fd}|  || j|j< qd S )N)r   r3   )rt   lenr   r   r   ZProcessrh   r   r   r   r   r   pid)r   r   rp   r   r   r   r   X  s    z)ProcessPoolExecutor._adjust_process_countc               
   O   s
  t | dkr| ^}}} nV| s&tdnHd|krZ|d}| ^}} dd l}|jdtdd ntdt | d  |j |jrt|j|j	rt
d	trt
d
t }t||| |}||j|j< |j|j | jd7  _|j  |  |W  5 Q R  S Q R X d S )N   zEdescriptor 'submit' of 'ProcessPoolExecutor' object needs an argumentr2   r   z.Passing 'fn' as keyword argument is deprecated)
stacklevelz6submit expected at least 1 positional argument, got %dr!   z*cannot schedule new futures after shutdownz6cannot schedule new futures after interpreter shutdown)r   r   rE   warningswarnDeprecationWarningr   rz   r{   rk   RuntimeErrorr   r   ZFuturer0   r   r   r   rZ   r   r   r   )r3   r4   r   r2   r   fwr   r   r   submitc  s<    

 


zProcessPoolExecutor.submitr!   )timeoutrP   c                   s:   |dk rt dt jtt|t|d|i|d}t|S )Nr!   zchunksize must be >= 1.rP   )r   )r   r>   mapr   rX   rT   r   )r   r2   r   rP   rQ   Zresultsr@   r   r   r     s    zProcessPoolExecutor.mapTc              	   C   s   | j  d| _W 5 Q R X | jr6| j  |r6| j  d | _| jd k	rd| j  |r^| j  d | _d | _	d | _
| jr| j  d | _d S r   )r   rk   r   r   r   r   r   r   Zjoin_threadr   r   )r   ry   r   r   r   shutdown  s"    





zProcessPoolExecutor.shutdown)NNNr   )T)r   r   r   r   r   r   r   r   Executor__text_signature____doc__r   r   rK   r   r   r@   r   r     s       
K$
r   )NN)2
__author__atexitrb   Zconcurrent.futuresr   ri   r   Zmultiprocessingr   Zmultiprocessing.connectionZmultiprocessing.queuesr   r   r   	functoolsr   rN   r   r)   WeakKeyDictionaryr   r   r   r    r   r   	Exceptionr#   r'   r-   objectr0   r6   r:   r;   rT   rX   r]   rh   rj   r~   r   r   r   r   ZBrokenExecutorr{   r   r   registerr   r   r   r   <module>.   sT   		

)& ! P