<!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>
3
2aP                 @   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m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ej Zdad	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dd Zd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'Z(G d(d) d)ej)Z*ej+e dS )*z"Brian Quinlan (brian@sweetapp.com)    N)_base)Full)SimpleQueue)wait)partialFc              C   sJ   da ttj } x| D ]\}}|jd  qW x| D ]\}}|j  q2W d S )NT)	_shutdownlist_threads_queuesitemsputjoin)r
   tq r   ,/opt/alt/python36/lib64/python3.6/process.py_python_exitO   s    r      c               @   s   e Zd Zdd Zdd ZdS )_RemoteTracebackc             C   s
   || _ d S )N)tb)selfr   r   r   r   __init__a   s    z_RemoteTraceback.__init__c             C   s   | j S )N)r   )r   r   r   r   __str__c   s    z_RemoteTraceback.__str__N)__name__
__module____qualname__r   r   r   r   r   r   r   `   s   r   c               @   s   e Zd Zdd Zdd ZdS )_ExceptionWithTracebackc             C   s0   t jt|||}dj|}|| _d| | _d S )N z

"""
%s""")	tracebackformat_exceptiontyper   excr   )r   r    r   r   r   r   r   g   s    
z _ExceptionWithTraceback.__init__c             C   s   t | j| jffS )N)_rebuild_excr    r   )r   r   r   r   
__reduce__l   s    z"_ExceptionWithTraceback.__reduce__N)r   r   r   r   r"   r   r   r   r   r   f   s   r   c             C   s   t || _| S )N)r   	__cause__)r    r   r   r   r   r!   o   s    
r!   c               @   s   e Zd Zdd ZdS )	_WorkItemc             C   s   || _ || _|| _|| _d S )N)futurefnargskwargs)r   r%   r&   r'   r(   r   r   r   r   t   s    z_WorkItem.__init__N)r   r   r   r   r   r   r   r   r$   s   s   r$   c               @   s   e Zd ZdddZdS )_ResultItemNc             C   s   || _ || _|| _d S )N)work_id	exceptionresult)r   r*   r+   r,   r   r   r   r   {   s    z_ResultItem.__init__)NN)r   r   r   r   r   r   r   r   r)   z   s   r)   c               @   s   e Zd Zdd ZdS )	_CallItemc             C   s   || _ || _|| _|| _d S )N)r*   r&   r'   r(   )r   r*   r&   r'   r(   r   r   r   r      s    z_CallItem.__init__N)r   r   r   r   r   r   r   r   r-      s   r-   c             g   s0   t | }x"ttj|| }|s"d S |V  q
W d S )N)ziptuple	itertoolsislice)	chunksize	iterablesitchunkr   r   r   _get_chunks   s    r6   c                s    fdd|D S )Nc                s   g | ]} | qS r   r   ).0r'   )r&   r   r   
<listcomp>   s    z"_process_chunk.<locals>.<listcomp>r   )r&   r5   r   )r&   r   _process_chunk   s    	r9   c             C   s   x| j dd}|d kr(|jtj  d S y|j|j|j}W nB tk
r~ } z&t||j	}|jt
|j|d W Y d d }~X qX |jt
|j|d qW d S )NT)block)r+   )r,   )getr   osgetpidr&   r'   r(   BaseExceptionr   __traceback__r)   r*   )
call_queueresult_queueZ	call_itemrer    r   r   r   _process_worker   s    &
rD   c             C   sx   xr|j  rd S y|jdd}W n tjk
r4   d S X | | }|jj rh|jt||j|j	|j
dd q| |= qqW d S )NF)r:   T)Zfullr;   queueZEmptyr%   Zset_running_or_notify_cancelr   r-   r&   r'   r(   )pending_work_itemsZwork_idsr@   r*   	work_itemr   r   r   _add_call_item_to_queue   s     

rH   c                s  d fdd} fdd}|j }xlt||  dd j D }	t|g|	 }
||
krf|j }nr|  d k	rd_d_d x&|j D ]\}}|jj	t
d ~qW |j  xj D ]}|j  qW |  d S t|trj|}|j  sR|  d S nJ|d k	rR|j|jd }|d k	rR|jrB|jj	|j n|jj|j ~|  | ry|sr|  d S W n tk
r   Y nX d q(W d S )	Nc                  s   t p d kp jS )N)r   _shutdown_threadr   )executorr   r   shutting_down   s    z/_queue_management_worker.<locals>.shutting_downc                 sZ   t dd j D } xtd| D ]} jd  q"W  j  xj D ]}|j  qFW d S )Nc             s   s   | ]}|j  V  qd S )N)Zis_alive)r7   pr   r   r   	<genexpr>   s    zD_queue_management_worker.<locals>.shutdown_worker.<locals>.<genexpr>r   )sumvaluesrangeZ
put_nowaitcloser   )Znb_children_aliveirL   )r@   	processesr   r   shutdown_worker   s    z1_queue_management_worker.<locals>.shutdown_workerc             S   s   g | ]
}|j qS r   )sentinel)r7   rL   r   r   r   r8     s    z,_queue_management_worker.<locals>.<listcomp>Tz^A process in the process pool was terminated abruptly while the future was running or pending.)Z_readerrH   rO   r   Zrecv_brokenrI   r
   r%   Zset_exceptionBrokenProcessPoolclearZ	terminate
isinstanceintpopr   r*   r+   Z
set_resultr,   r   )Zexecutor_referencerS   rF   Zwork_ids_queuer@   rA   rK   rT   readerZ	sentinelsZreadyZresult_itemr*   rG   rL   r   )r@   rJ   rS   r   _queue_management_worker   sb    



r]   c              C   sh   t rtrttda ytjd} W n ttfk
r:   d S X | dkrHd S | dkrTd S d|  attd S )NTSC_SEM_NSEMS_MAXr      z@system provides too few semaphores (%d available, 256 necessary))_system_limits_checked_system_limitedNotImplementedErrorr<   sysconfAttributeError
ValueError)Z	nsems_maxr   r   r   _check_system_limitsQ  s    rg   c             c   s.   x(| D ] }|j   x|r$|j V  qW qW d S )N)reverser[   )iterableelementr   r   r   _chain_from_iterable_of_listsh  s    
rk   c               @   s   e Zd ZdS )rW   N)r   r   r   r   r   r   r   rW   t  s   rW   c                   sh   e Zd Zd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Zejjj	e_	  ZS )ProcessPoolExecutorNc             C   s   t   |d krtj pd| _n|dkr.td|| _tj| jt | _d| j_	t
 | _tj | _d | _i | _d| _tj | _d| _d| _i | _d S )Nr   r   z"max_workers must be greater than 0TF)rg   r<   	cpu_count_max_workersrf   multiprocessingZQueueEXTRA_QUEUED_CALLS_call_queueZ_ignore_epiper   _result_queuerE   	_work_ids_queue_management_thread
_processesrI   	threadingZLock_shutdown_lockrV   _queue_count_pending_work_items)r   max_workersr   r   r   r   |  s$    


zProcessPoolExecutor.__init__c             C   sp   | j fdd}| jd krl| j  tjttj| || j| j	| j
| j| j fd| _d| j_| jj  | j t| j< d S )Nc             S   s   |j d  d S )N)r   )_r   r   r   r   
weakref_cb  s    zFProcessPoolExecutor._start_queue_management_thread.<locals>.weakref_cb)targetr'   T)rr   rt   _adjust_process_countrv   ZThreadr]   weakrefrefru   ry   rs   rq   Zdaemonstartr	   )r   r|   r   r   r   _start_queue_management_thread  s    


z2ProcessPoolExecutor._start_queue_management_threadc             C   sJ   xDt t| j| jD ].}tjt| j| jfd}|j	  || j|j
< qW d S )N)r}   r'   )rP   lenru   rn   ro   ZProcessrD   rq   rr   r   pid)r   r{   rL   r   r   r   r~     s    z)ProcessPoolExecutor._adjust_process_countc             O   s   | j t | jrtd| jr$tdtj }t||||}|| j| j	< | j
j| j	 |  j	d7  _	| jjd  | j  |S Q R X d S )NzKA child process terminated abruptly, the process pool is not usable anymorez*cannot schedule new futures after shutdownr   )rw   rV   rW   rI   RuntimeErrorr   ZFuturer$   ry   rx   rs   r   rr   r   )r   r&   r'   r(   fwr   r   r   submit  s    zProcessPoolExecutor.submitr   )timeoutr2   c               s:   |dk rt dt jtt|t|d|i|d}t|S )Nr   zchunksize must be >= 1.r2   )r   )rf   supermapr   r9   r6   rk   )r   r&   r   r2   r3   results)	__class__r   r   r     s    zProcessPoolExecutor.mapTc          	   C   sT   | j  d| _W d Q R X | jr8| jjd  |r8| jj  d | _d | _d | _d | _d S )NT)rw   rI   rt   rr   r   r   rq   ru   )r   r   r   r   r   shutdown  s    
zProcessPoolExecutor.shutdown)N)T)r   r   r   r   r   r~   r   r   Executor__doc__r   r   __classcell__r   r   )r   r   rl   {  s   
(	
rl   ),
__author__atexitr<   concurrent.futuresr   rE   r   ro   r   Zmultiprocessing.connectionr   rv   r   	functoolsr   r0   r   WeakKeyDictionaryr	   r   r   rp   	Exceptionr   r   r!   objectr$   r)   r-   r6   r9   rD   rH   r]   ra   rb   rg   rk   r   rW   r   rl   registerr   r   r   r   <module>.   sH   		%s 	