<!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>
a
    XC?hz                     @   s~  d Z ddlZddlmZ ddl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e
e 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#d-dd Z$d!d" Z%G d#d$ d$e
j&Z'da(da)d%d& Z*d'd( Z+G d)d* d*ej,Z-G d+d, d,ej.Z/dS ).z"Brian Quinlan (brian@sweetapp.com)    N)_base)Queue)partialFc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_ThreadWakeupc                 C   s   d| _ tjdd\| _| _d S )NF)Zduplex)_closedmpZPipe_reader_writerself r   ?/opt/alt/python39/lib64/python3.9/concurrent/futures/process.py__init__C   s    z_ThreadWakeup.__init__c                 C   s$   | j s d| _ | j  | j  d S NT)r   r	   closer   r
   r   r   r   r   G   s    
z_ThreadWakeup.closec                 C   s   | j s| jd d S )N    )r   r	   Z
send_bytesr
   r   r   r   wakeupM   s    z_ThreadWakeup.wakeupc                 C   s    | j s| j r| j  qd S N)r   r   ZpollZ
recv_bytesr
   r   r   r   clearQ   s    
z_ThreadWakeup.clearN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   B   s   r   c                  C   s@   da tt } | D ]\}}|  q| D ]\}}|  q*d S r   )_global_shutdownlist_threads_wakeupsitemsr   join)r   _thread_wakeuptr   r   r   _python_exitW   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   w   s    z_RemoteTraceback.__init__c                 C   s   | j S r   r$   r
   r   r   r   __str__y   s    z_RemoteTraceback.__str__N)r   r   r   r   r&   r   r   r   r   r#   v   s   r#   c                   @   s   e Zd Zdd Zdd ZdS )_ExceptionWithTracebackc                 C   s8   t t|||}d|}|| _d | j_d| | _d S )N z

"""
%s""")	tracebackformat_exceptiontyper   exc__traceback__r%   )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   r2   r3   r4   r5   r   r   r   r      s    z_WorkItem.__init__Nr   r   r   r   r   r   r   r   r1      s   r1   c                   @   s   e Zd ZdddZdS )_ResultItemNc                 C   s   || _ || _|| _d S r   )work_id	exceptionresult)r   r8   r9   r:   r   r   r   r      s    z_ResultItem.__init__)NNr6   r   r   r   r   r7      s   r7   c                   @   s   e Zd Zdd ZdS )	_CallItemc                 C   s   || _ || _|| _|| _d S r   )r8   r3   r4   r5   )r   r8   r3   r4   r5   r   r   r   r      s    z_CallItem.__init__Nr6   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shutdown_lockr   superr   )r   max_sizer=   r>   r?   r   	__class__r   r   r      s    z_SafeQueue.__init__c                    s   t |trtt|||j}tdd||_	| j
|jd }| j | j  W d    n1 sj0    Y  |d ur|j| nt || d S )Nz

"""
{}"""r(   )
isinstancer;   r)   r*   r+   r-   r#   formatr   r0   r>   popr8   r?   r   r   r2   set_exceptionr@   _on_queue_feeder_error)r   eobjr%   	work_itemrB   r   r   rH      s    
(z!_SafeQueue._on_queue_feeder_error)r   )r   r   r   r   rH   __classcell__r   r   rB   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
    rU   c                    s    fdd|D S )Nc                    s   g | ]} | qS r   r   ).0r4   r3   r   r   
<listcomp>   r   z"_process_chunk.<locals>.<listcomp>r   )r3   rT   r   rW   r   _process_chunk   s    	rY   c              
   C   s`   z|  t|||d W nB tyZ } z*t||j}|  t||d W Y d }~n
d }~0 0 d S )N)r:   r9   r9   )putr7   BaseExceptionr'   r-   )result_queuer8   r:   r9   rI   r,   r   r   r   _sendback_result   s    
r^   c              
   C   s   |d ur:z||  W n$ t y8   tjjddd Y d S 0 | jdd}|d u r`|t  d S z|j|j	i |j
}W n@ t y } z(t||j}t||j|d W Y d }~nd }~0 0 t||j|d ~~q:d S )NzException in initializer:T)exc_infoblockrZ   )r:   )r\   r   ZLOGGERZcriticalgetr[   osgetpidr3   r4   r5   r'   r-   r^   r8   )
call_queuer]   initializerinitargsZ	call_itemrrI   r,   r   r   r   _process_worker   s$    &ri   c                       sl   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Z  ZS )_ExecutorManagerThreadc                    sf   |j | _|j| _| j| jfdd}t||| _|j| _|j	| _
|j| _|j| _|j| _t   d S )Nc                 S   s<   t jd | |  W d    n1 s.0    Y  d S )Nz?Executor collected: triggering callback for QueueManager wakeup)r   utildebugr   )r   r   r?   r   r   r   
weakref_cb  s    z3_ExecutorManagerThread.__init__.<locals>.weakref_cb)_executor_manager_thread_wakeupr   _shutdown_lockr?   weakrefrefexecutor_reference
_processes	processes_call_queuere   _result_queuer]   	_work_idswork_ids_queue_pending_work_itemsr>   r@   r   )r   executorrm   rB   r   r   r     s    	
z_ExecutorManagerThread.__init__c                 C   s   |    |  \}}}|r(| | d S |d urX| | ~|  }|d urV|j  ~|  r |   | j	s | 
  d S q d S r   )add_call_item_to_queuewait_result_broken_or_wakeupterminate_brokenprocess_result_itemrr   _idle_worker_semaphorereleaseis_shutting_downflag_executor_shutting_downr>   join_executor_internals)r   result_item	is_brokencauserz   r   r   r   run:  s"    


z_ExecutorManagerThread.runc                 C   s~   | j  rd S z| jjdd}W n tjy6   Y d S 0 | j| }|j rn| j j	t
||j|j|jdd q | j|= q q d S )NFr`   T)re   Zfullrx   rb   queueEmptyr>   r2   Zset_running_or_notify_cancelr[   r;   r3   r4   r5   )r   r8   rK   r   r   r   r{   Z  s"    



z-_ExecutorManagerThread.add_call_item_to_queuec           
   
   C   s   | j j}| jj}||g}dd t| j D }tj|| }d }d}d }||v rz|	 }d}W q t
y }	 z tt|	|	|	j}W Y d }	~	qd }	~	0 0 n||v rd}| j | j  W d    n1 s0    Y  |||fS )Nc                 S   s   g | ]
}|j qS r   )sentinelrV   pr   r   r   rX   {  r   zG_ExecutorManagerThread.wait_result_broken_or_wakeup.<locals>.<listcomp>TF)r]   r   r   r   rt   valuesr   Z
connectionwaitZrecvr\   r)   r*   r+   r-   r?   r   )
r   Zresult_readerZwakeup_readerZreadersZworker_sentinelsZreadyr   r   r   rI   r   r   r   r|   q  s&    ,(z3_ExecutorManagerThread.wait_result_broken_or_wakeupc                 C   sr   t |tr2| j|}|  | jsn|   d S n<| j|jd }|d urn|jr`|j	
|j n|j	|j d S r   )rD   intrt   rF   r   r   r>   r8   r9   r2   rG   Z
set_resultr:   )r   r   r   rK   r   r   r   r~     s    
z*_ExecutorManagerThread.process_result_itemc                 C   s   |   }tp|d u p|jS r   )rr   r   _shutdown_thread)r   rz   r   r   r   r     s    z'_ExecutorManagerThread.is_shutting_downc                 C   s   |   }|d ur d|_d|_d }td}|d urHtdd| d|_| j D ]\}}|j	
| ~qR| j  | j D ]}|  q~|   d S )NzKA child process terminated abruptly, the process pool is not usable anymoreTz^A process in the process pool was terminated abruptly while the future was running or pending.z
'''
r(   z''')rr   _brokenr   BrokenProcessPoolr#   r   r0   r>   r   r2   rG   r   rt   r   Z	terminater   )r   r   rz   Zbper8   rK   r   r   r   r   r}     s"    

z'_ExecutorManagerThread.terminate_brokenc                 C   s   |   }|d ur|d|_|jr|i }| j D ]\}}|j s*|||< q*|| _z| j  W qL t	j
yr   Y qvY qL0 qLd|_d S )NTF)rr   r   _cancel_pending_futuresr>   r   r2   Zcancelrx   Z
get_nowaitr   r   )r   rz   Znew_pending_work_itemsr8   rK   r   r   r   r     s    

z2_ExecutorManagerThread.flag_executor_shutting_downc              	   C   sl   |   }d}||k rh|   dkrht|| D ]8}z| jd  |d7 }W q, tjyb   Y  qY q,0 q,qd S )Nr   r!   )get_n_children_aliverangere   Z
put_nowaitr   ZFull)r   Zn_children_to_stopZn_sentinels_sentir   r   r   shutdown_workers  s    
z'_ExecutorManagerThread.shutdown_workersc                 C   sh   |    | j  | j  | j | j  W d    n1 sB0    Y  | j D ]}|  qVd S r   )	r   re   r   Zjoin_threadr?   r   rt   r   r   r   r   r   r   r   r     s    

(z._ExecutorManagerThread.join_executor_internalsc                 C   s   t dd | j D S )Nc                 s   s   | ]}|  V  qd S r   )Zis_aliver   r   r   r   	<genexpr>  r   z>_ExecutorManagerThread.get_n_children_alive.<locals>.<genexpr>)sumrt   r   r
   r   r   r   r     s    z+_ExecutorManagerThread.get_n_children_alive)r   r   r   r   r   r{   r|   r~   r   r}   r   r   r   r   rL   r   r   rB   r   rj     s   + 
&rj   c               	   C   sh   t rtrttda ztd} W n ttfy:   Y d S 0 | dkrHd S | dkrTd 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NotImplementedErrorrc   sysconfAttributeError
ValueError)Z	nsems_maxr   r   r   _check_system_limits  s     r   c                 c   s&   | D ]}|   |r| V  qqd S r   )reverserF   )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   8  s   r   c                       s~   e Zd ZdddZdd Zdd Zd	d
 Zdd Zdd Ze	j
jje_ddd fdd
ZdddddZe	j
jje_  ZS )ProcessPoolExecutorNr   c                 C   sJ  t   |d u 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 u r~t	
 }|| _| jjdddk| _|d urt|std	|| _|| _d | _i | _d| _t | _td| _d| _d| _i | _d| _t | _| jt  }t!|| j| j| j| jd
| _"d| j"_#|$ | _%t&' | _(d S )Nr!   Zwin32r   z"max_workers must be greater than 0zmax_workers must be <= F)Z
allow_noneforkzinitializer must be a callable)rA   r=   r>   r?   r   T))r   rc   	cpu_count_max_workerssysplatformmin_MAX_WINDOWS_WORKERSr   r   Zget_context_mp_contextZget_start_method#_safe_to_dynamically_spawn_childrencallable	TypeError_initializer	_initargs_executor_manager_threadrs   r   	threadingZLockro   Z	Semaphorer   r   _queue_country   r   r   rn   EXTRA_QUEUED_CALLSr<   ru   Z_ignore_epipeZSimpleQueuerv   r   r   rw   )r   Zmax_workersZ
mp_contextrf   rg   Z
queue_sizer   r   r   r   @  sZ    






zProcessPoolExecutor.__init__c                 C   s<   | j d u r8| js|   t| | _ | j   | jt| j < d S r   )r   r   _launch_processesrj   startrn   r   r
   r   r   r   _start_executor_manager_thread  s    


z2ProcessPoolExecutor._start_executor_manager_threadc                 C   s2   | j jddrd S t| j}|| jk r.|   d S )NF)Zblocking)r   acquirelenrs   r   _spawn_process)r   Zprocess_countr   r   r   _adjust_process_count  s
    

z)ProcessPoolExecutor._adjust_process_countc                 C   s$   t t| j| jD ]}|   qd S r   )r   r   rs   r   r   )r   r   r   r   r   r     s    z%ProcessPoolExecutor._launch_processesc                 C   s8   | j jt| j| j| j| jfd}|  || j|j	< d S )N)targetr4   )
r   ZProcessri   ru   rv   r   r   r   rs   pidr   r   r   r   r     s    z"ProcessPoolExecutor._spawn_processc                O   s   | j  | jrt| j| jr&tdtr2tdt }t||||}|| j	| j
< | j| j
 |  j
d7  _
| j  | jr|   |   |W  d    S 1 s0    Y  d S )Nz*cannot schedule new futures after shutdownz6cannot schedule new futures after interpreter shutdownr!   )ro   r   r   r   RuntimeErrorr   r   ZFuturer1   ry   r   rw   r[   rn   r   r   r   r   )r   r3   r4   r5   fwr   r   r   submit  s"    

zProcessPoolExecutor.submitr!   )timeoutrQ   c                   s:   |dk rt dt jtt|t|d|i|d}t|S )Nr!   zchunksize must be >= 1.rQ   )r   )r   r@   mapr   rY   rU   r   )r   r3   r   rQ   rR   ZresultsrB   r   r   r     s    zProcessPoolExecutor.mapTF)cancel_futuresc                C   s   | j 0 || _d| _| jd ur(| j  W d    n1 s<0    Y  | jd ur^|r^| j  d | _d | _| jd ur|r| j	  d | _d | _
d | _d S r   )ro   r   r   rn   r   r   r   ru   rv   r   rs   )r   r   r   r   r   r   shutdown  s    
(

zProcessPoolExecutor.shutdown)NNNr   )T)r   r   r   r   r   r   r   r   r   r   Executor__doc__r   r   rL   r   r   rB   r   r   ?  s     
U

r   )NN)0
__author__rc   Zconcurrent.futuresr   r   Zmultiprocessingr   Zmultiprocessing.connectionZmultiprocessing.queuesr   r   rp   	functoolsr   rO   r   r)   WeakKeyDictionaryr   r   r   r    Z_register_atexitr   r   	Exceptionr#   r'   r.   objectr1   r7   r;   r<   rU   rY   r^   ri   ZThreadrj   r   r   r   r   ZBrokenExecutorr   r   r   r   r   r   r   <module>.   sN   



)  