<!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>

Yfd                 @   s  d  d g Z  d d l Z d d l Z d d l Z 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 Z d Z d Z e j   Z d d	   Z d
 d   Z Gd d   d e  Z Gd d   d  Z d d   Z Gd d   d e  Z d f  d d d d  Z d d   Z Gd d    d  e  Z Gd d   d e  Z e Z Gd d   d e  Z Gd d   d e  Z Gd  d!   d! e  Z  Gd" d   d e  Z! d S)#Pool
ThreadPool    N   )util)get_contextTimeoutError   c             C   s   t  t |     S)N)listmap)args r   9/opt/alt/python35/lib64/python3.5/multiprocessing/pool.pymapstar+   s    r   c             C   s   t  t j |  d |  d   S)Nr   r   )r	   	itertoolsstarmap)r   r   r   r   starmapstar.   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__6   s    zRemoteTraceback.__init__c             C   s   |  j  S)N)r   )r   r   r   r   __str__8   s    zRemoteTraceback.__str__N)__name__
__module____qualname__r   r   r   r   r   r   r   5   s   r   c               @   s(   e  Z d  Z d d   Z d d   Z d S)ExceptionWithTracebackc             C   sD   t  j t |  | |  } d j |  } | |  _ d | |  _ d  S)N z

"""
%s""")	tracebackformat_exceptiontypejoinexcr   )r   r    r   r   r   r   r   <   s    	zExceptionWithTraceback.__init__c             C   s   t  |  j |  j f f S)N)rebuild_excr    r   )r   r   r   r   
__reduce__A   s    z!ExceptionWithTraceback.__reduce__N)r   r   r   r   r"   r   r   r   r   r   ;   s   r   c             C   s   t  |  |  _ |  S)N)r   	__cause__)r    r   r   r   r   r!   D   s    r!   c                   s@   e  Z d  Z d Z   f d d   Z d d   Z d d   Z   S)MaybeEncodingErrorzVWraps possible unpickleable errors, so they can be
    safely sent through the socket.c                sA   t  |  |  _ t  |  |  _ t t |   j |  j |  j  d  S)N)reprr    valuesuperr$   r   )r   r    r&   )	__class__r   r   r   P   s    zMaybeEncodingError.__init__c             C   s   d |  j  |  j f S)Nz(Error sending result: '%s'. Reason: '%s')r&   r    )r   r   r   r   r   U   s    	zMaybeEncodingError.__str__c             C   s   d |  j  j |  f S)Nz<%s: %s>)r(   r   )r   r   r   r   __repr__Y   s    zMaybeEncodingError.__repr__)r   r   r   __doc__r   r   r)   r   r   )r(   r   r$   L   s   r$   Fc          '   C   s  | j  } |  j } t |  d  r; |  j j   | j j   | d  k	 rQ | |   d } x| d  k sx | r| | k  ry |   }	 Wn& t t f k
 r t j	 d  PYn X|	 d  k r t j	 d  P|	 \ }
 } } } } y d | | |   f } WnU t
 k
 rM} z5 | r/| t k	 r/t | | j  } d | f } WYd  d  } ~ Xn Xy | |
 | | f  Wnb t
 k
 r} zB t | | d  } t j	 d |  | |
 | d | f f  WYd  d  } ~ Xn Xd  }	 }
 } } } } | d 7} qZ Wt j	 d	 |  d  S)
N_writerr   z)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFr   z0Possible encoding error while sending result: %szworker exiting after %d tasks)putgethasattrr+   close_readerEOFErrorOSErrorr   debug	Exception_helper_reraises_exceptionr   __traceback__r$   )inqueueoutqueueinitializerinitargsZmaxtasksZwrap_exceptionr,   r-   Z	completedtaskjobifuncr   kwdsresultewrappedr   r   r   worker]   sD    		
!	,rC   c             C   s
   |   d S)z@Pickle-able helper function for use by _guarded_task_generation.Nr   )Zexr   r   r   r5      s    r5   c               @   s  e  Z d  Z d Z d Z d d   Z d d f  d d d d  Z d d	   Z d
 d   Z d d   Z	 d d   Z
 f  i  d d  Z d d d  Z d d d  Z d d d d d  Z d d   Z d d d  Z d d d  Z f  i  d d d d   Z d d d d! d"  Z d d d d# d$  Z e d% d&    Z e d' d(    Z e d) d*    Z e d+ d,    Z d- d.   Z d/ d0   Z d1 d2   Z d3 d4   Z e d5 d6    Z e d7 d8    Z  d9 d:   Z! d; d<   Z" d S)=r   zS
    Class which supports an async version of applying functions to arguments.
    Tc             O   s   |  j  j | |   S)N)_ctxProcess)r   r   r?   r   r   r   rE      s    zPool.ProcessNc             C   s#  | p t    |  _ |  j   t j   |  _ i  |  _ t |  _ | |  _	 | |  _
 | |  _ | d  k rv t j   ps d } | d k  r t d   | d  k	 r t |  r t d   | |  _ g  |  _ |  j   t j d t j d |  f  |  _ d |  j _ t |  j _ |  j j   t j d t j d |  j |  j |  j |  j |  j f  |  _ d |  j _ t |  j _ |  j j   t j d t j d |  j |  j  |  j f  |  _! d |  j! _ t |  j! _ |  j! j   t" j# |  |  j$ d |  j |  j% |  j |  j |  j |  j |  j! |  j f d d |  _& d  S)	Nr   z&Number of processes must be at least 1zinitializer must be a callabletargetr   TZexitpriority   )'r   rD   _setup_queuesqueueQueue
_taskqueue_cacheRUN_state_maxtasksperchild_initializer	_initargsos	cpu_count
ValueErrorcallable	TypeError
_processes_pool_repopulate_pool	threadingZThreadr   _handle_workers_worker_handlerdaemonstart_handle_tasks
_quick_put	_outqueue_task_handler_handle_results
_quick_get_result_handlerr   ZFinalize_terminate_pool_inqueue
_terminate)r   	processesr9   r:   Zmaxtasksperchildcontextr   r   r   r      sT    
							
						zPool.__init__c             C   sw   d } xj t  t t |  j    D]M } |  j | } | j d k	 r" t j d |  | j   d } |  j | =q" W| S)zCleanup after any worker processes which have exited due to reaching
        their specified lifetime.  Returns True if any workers were cleaned up.
        FNzcleaning up worker %dT)reversedrangelenrX   exitcoder   r3   r   )r   Zcleanedr=   rC   r   r   r   _join_exited_workers   s    "
zPool._join_exited_workersc             C   s   x t  |  j t |  j   D] } |  j d t d |  j |  j |  j |  j	 |  j
 |  j f  } |  j j |  | j j d d  | _ d | _ | j   t j d  q Wd S)zBring the number of pool processes up to the specified number,
        for use after reaping workers which have exited.
        rF   r   rE   Z
PoolWorkerTzadded workerN)rl   rW   rm   rX   rE   rC   rg   ra   rP   rQ   rO   _wrap_exceptionappendnamereplacer]   r^   r   r3   )r   r=   wr   r   r   rY      s    #	
zPool._repopulate_poolc             C   s   |  j    r |  j   d S)zEClean up any exited workers and start replacements for them.
        N)ro   rY   )r   r   r   r   _maintain_pool   s    zPool._maintain_poolc             C   sL   |  j  j   |  _ |  j  j   |  _ |  j j j |  _ |  j j j |  _	 d  S)N)
rD   ZSimpleQueuerg   ra   r+   sendr`   r0   recvrd   )r   r   r   r   rH      s    zPool._setup_queuesc             C   s   |  j  | | |  j   S)z6
        Equivalent of `func(*args, **kwds)`.
        )apply_asyncr-   )r   r>   r   r?   r   r   r   apply   s    z
Pool.applyc             C   s   |  j  | | t |  j   S)zx
        Apply `func` to each element in `iterable`, collecting the results
        in a list that is returned.
        )
_map_asyncr   r-   )r   r>   iterable	chunksizer   r   r   r
     s    zPool.mapc             C   s   |  j  | | t |  j   S)z
        Like `map()` method but the elements of the `iterable` are expected to
        be iterables as well and will be unpacked as arguments. Hence
        `func` and (a, b) becomes func(a, b).
        )rz   r   r-   )r   r>   r{   r|   r   r   r   r     s    zPool.starmapc             C   s   |  j  | | t | | |  S)z=
        Asynchronous version of `starmap()` method.
        )rz   r   )r   r>   r{   r|   callbackerror_callbackr   r   r   starmap_async  s    zPool.starmap_asyncc             c   s   y> d } x1 t  |  D]# \ } } | | | | f i  f Vq WWn@ t k
 r } z  | | d t | f i  f VWYd d } ~ Xn Xd S)zProvides a generator of tasks for imap and imap_unordered with
        appropriate handling for iterables which throw exceptions during
        iteration.r   N)	enumerater4   r5   )r   Z
result_jobr>   r{   r=   xrA   r   r   r   _guarded_task_generation  s    zPool._guarded_task_generationr   c             C   s   |  j  t k r t d   | d k re t |  j  } |  j j |  j | j | |  | j	 f  | St
 j | | |  } t |  j  } |  j j |  j | j t |  | j	 f  d d   | D Sd S)zP
        Equivalent of `map()` -- can be MUCH slower than `Pool.map()`.
        zPool not runningr   c             s   s"   |  ] } | D] } | Vq q d  S)Nr   ).0chunkitemr   r   r   	<genexpr>@  s    zPool.imap.<locals>.<genexpr>N)rN   rM   rT   IMapIteratorrL   rK   r,   r   _job_set_lengthr   
_get_tasksr   )r   r>   r{   r|   r@   task_batchesr   r   r   imap'  s     		z	Pool.imapc             C   s   |  j  t k r t d   | d k re t |  j  } |  j j |  j | j | |  | j	 f  | St
 j | | |  } t |  j  } |  j j |  j | j t |  | j	 f  d d   | D Sd S)zL
        Like `imap()` method but ordering of results is arbitrary.
        zPool not runningr   c             s   s"   |  ] } | D] } | Vq q d  S)Nr   )r   r   r   r   r   r   r   [  s    z&Pool.imap_unordered.<locals>.<genexpr>N)rN   rM   rT   IMapUnorderedIteratorrL   rK   r,   r   r   r   r   r   r   )r   r>   r{   r|   r@   r   r   r   r   imap_unorderedB  s     		zPool.imap_unorderedc             C   s_   |  j  t k r t d   t |  j | |  } |  j j | j d | | | f g d f  | S)z;
        Asynchronous version of `apply()` method.
        zPool not runningr   N)rN   rM   rT   ApplyResultrL   rK   r,   r   )r   r>   r   r?   r}   r~   r@   r   r   r   rx   ]  s
    +zPool.apply_asyncc             C   s   |  j  | | t | | |  S)z9
        Asynchronous version of `map()` method.
        )rz   r   )r   r>   r{   r|   r}   r~   r   r   r   	map_asynch  s    zPool.map_asyncc       
      C   s   |  j  t k r t d   t | d  s6 t |  } | d k rz t t |  t |  j  d  \ } } | rz | d 7} t |  d k r d } t j	 | | |  } t
 |  j | t |  | d | }	 |  j j |  j |	 j | |  d f  |	 S)zY
        Helper function to implement map, starmap and their async counterparts.
        zPool not running__len__N   r   r   r~   )rN   rM   rT   r.   r	   divmodrm   rX   r   r   	MapResultrL   rK   r,   r   r   )
r   r>   r{   Zmapperr|   r}   r~   Zextrar   r@   r   r   r   rz   p  s&    (
		
zPool._map_asyncc             C   sr   t  j   } xB | j t k s6 |  j rP | j t k rP |  j   t j d  q W|  j	 j
 d   t j d  d  S)Ng?zworker handler exiting)rZ   current_threadrN   rM   rL   	TERMINATEru   timesleeprK   r,   r   r3   )poolthreadr   r   r   r[     s    *
zPool._handle_workersc             C   s  t  j   } x+t |  j d   D]
\ } } d  } z x | D] } | j rX t j d  Py | |  Wq; t k
 r }	 zN | d  d  \ }
 } y | |
 j | d |	 f  Wn t	 k
 r Yn XWYd  d  }	 ~	 Xq; Xq; W| rt j d  | r | d n d } | | d  w PWd  d  } } }
 Xq Wt j d  yF t j d  | j
 d   t j d  x | D] } | d   qkWWn t k
 rt j d	  Yn Xt j d
  d  S)Nz'task handler found thread._state != RUNr   Fzdoing set_length()r   ztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exitingr   )rZ   r   iterr-   rN   r   r3   r4   _setKeyErrorr,   r2   )	taskqueuer,   r8   r   cacher   ZtaskseqZ
set_lengthr;   rA   r<   idxpr   r   r   r_     sB    	zPool._handle_tasksc             C   s  t  j   } x y |   } Wn) t t f k
 rG t j d  d  SYn X| j r_ t j d  P| d  k ry t j d  P| \ } } } y | | j | |  Wn t k
 r Yn Xd  } } } q Wx | r| j t	 k ry |   } Wn) t t f k
 rt j d  d  SYn X| d  k r4t j d  q | \ } } } y | | j | |  Wn t k
 roYn Xd  } } } q Wt
 |  d  rt j d  y2 x+ t d  D] } |  j j   sP|   qWWn t t f k
 rYn Xt j d t |  | j  d  S)	Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr0   z"ensuring that outqueue is not full
   z7result handler exiting: len(cache)=%s, thread._state=%s)rZ   r   r2   r1   r   r3   rN   r   r   r   r.   rl   r0   pollrm   )r8   r-   r   r   r;   r<   r=   objr   r   r   rc     sZ    				zPool._handle_resultsc             c   sD   t  |  } x1 t t j | |   } | s1 d  S|  | f Vq Wd  S)N)r   tupler   islice)r>   itsizer   r   r   r   r     s    zPool._get_tasksc             C   s   t  d   d  S)Nz:pool objects cannot be passed between processes or pickled)NotImplementedError)r   r   r   r   r"     s    zPool.__reduce__c             C   s5   t  j d  |  j t k r1 t |  _ t |  j _ d  S)Nzclosing pool)r   r3   rN   rM   CLOSEr\   )r   r   r   r   r/     s    	z
Pool.closec             C   s0   t  j d  t |  _ t |  j _ |  j   d  S)Nzterminating pool)r   r3   r   rN   r\   rh   )r   r   r   r   	terminate  s    	zPool.terminatec             C   sV   t  j d  |  j j   |  j j   |  j j   x |  j D] } | j   q> Wd  S)Nzjoining pool)r   r3   r\   r   rb   re   rX   )r   r   r   r   r   r     s    z	Pool.joinc             C   sZ   t  j d  |  j j   x9 | j   rU |  j j   rU |  j j   t j	 d  q Wd  S)Nz7removing tasks from inqueue until task handler finishedr   )
r   r3   Z_rlockacquireis_aliver0   r   rw   r   r   )r7   task_handlerr   r   r   r   _help_stuff_finish(  s
    zPool._help_stuff_finishc	       
      C   s  t  j d  t | _ t | _ t  j d  |  j | | t |   t | _ | j d   t  j d  t j   | k	 r | j	   | r t
 | d d  r t  j d  x' | D] }	 |	 j d  k r |	 j   q Wt  j d  t j   | k	 r | j	   t  j d  t j   | k	 r&| j	   | rt
 | d d  rt  j d	  x8 | D]0 }	 |	 j   rSt  j d
 |	 j  |	 j	   qSWd  S)Nzfinalizing poolz&helping task handler/workers to finishzjoining worker handlerr   r   zterminating workerszjoining task handlerzjoining result handlerzjoining pool workerszcleaning up worker %d)r   r3   r   rN   r   rm   r,   rZ   r   r   r.   rn   r   r   pid)
clsr   r7   r8   r   Zworker_handlerr   Zresult_handlerr   r   r   r   r   rf   1  s6    			


zPool._terminate_poolc             C   s   |  S)Nr   )r   r   r   r   	__enter___  s    zPool.__enter__c             C   s   |  j    d  S)N)r   )r   exc_typeZexc_valZexc_tbr   r   r   __exit__b  s    zPool.__exit__)#r   r   r   r*   rp   rE   r   ro   rY   ru   rH   ry   r
   r   r   r   r   r   rx   r   rz   staticmethodr[   r_   rc   r   r"   r/   r   r   r   classmethodrf   r   r   r   r   r   r   r      sF   	8	
.<			.c               @   s^   e  Z d  Z d d   Z d d   Z d d   Z d d d	  Z d d
 d  Z d d   Z d S)r   c             C   sJ   t  j   |  _ t t  |  _ | |  _ | |  _ | |  _ |  | |  j <d  S)N)	rZ   ZEvent_eventnextjob_counterr   rL   	_callback_error_callback)r   r   r}   r~   r   r   r   r   k  s    			zApplyResult.__init__c             C   s   |  j  j   S)N)r   Zis_set)r   r   r   r   readys  s    zApplyResult.readyc             C   s   |  j  S)N)_success)r   r   r   r   
successfulv  s    zApplyResult.successfulNc             C   s   |  j  j |  d  S)N)r   wait)r   timeoutr   r   r   r   z  s    zApplyResult.waitc             C   s<   |  j  |  |  j   s t  |  j r/ |  j S|  j  d  S)N)r   r   r   r   _value)r   r   r   r   r   r-   }  s    	zApplyResult.getc             C   su   | \ |  _  |  _ |  j r4 |  j  r4 |  j |  j  |  j rW |  j  rW |  j |  j  |  j j   |  j |  j =d  S)N)r   r   r   r   r   setrL   r   )r   r=   r   r   r   r   r     s    zApplyResult._set)	r   r   r   r   r   r   r   r-   r   r   r   r   r   r   i  s   	r   c               @   s(   e  Z d  Z d d   Z d d   Z d S)r   c             C   s   t  j |  | | d | d |  _ d  g | |  _ | |  _ | d k rj d |  _ |  j j   | |  j =n | | t	 | |  |  _ d  S)Nr~   Tr   )
r   r   r   r   
_chunksize_number_leftr   r   r   bool)r   r   r|   lengthr}   r~   r   r   r   r     s    			zMapResult.__init__c             C   s   | \ } } | r | |  j  | |  j | d |  j  <|  j d 8_ |  j d k r |  j rn |  j |  j   |  j |  j =|  j j   nE d |  _ | |  _  |  j	 r |  j	 |  j   |  j |  j =|  j j   d  S)Nr   r   F)
r   r   r   r   rL   r   r   r   r   r   )r   r=   Zsuccess_resultsuccessr@   r   r   r   r     s    %				zMapResult._setN)r   r   r   r   r   r   r   r   r   r     s   r   c               @   sU   e  Z d  Z d d   Z d d   Z d d d  Z e Z d d	   Z d
 d   Z d S)r   c             C   sk   t  j t  j    |  _ t t  |  _ | |  _ t j	   |  _
 d |  _ d  |  _ i  |  _ |  | |  j <d  S)Nr   )rZ   Z	ConditionZLock_condr   r   r   rL   collectionsdeque_items_index_length	_unsorted)r   r   r   r   r   r     s    				zIMapIterator.__init__c             C   s   |  S)Nr   )r   r   r   r   __iter__  s    zIMapIterator.__iter__Nc             C   s   |  j   y |  j j   } Wn t k
 r |  j |  j k rE t  |  j  j |  y |  j j   } Wn0 t k
 r |  j |  j k r t  t  Yn XYn XWd  QRX| \ } } | r | S|  d  S)N)	r   r   popleft
IndexErrorr   r   StopIterationr   r   )r   r   r   r   r&   r   r   r   r     s"    
zIMapIterator.nextc          
   C   s   |  j   |  j | k r |  j j |  |  j d 7_ xJ |  j |  j k r |  j j |  j  } |  j j |  |  j d 7_ q; W|  j  j   n | |  j | <|  j |  j k r |  j |  j	 =Wd  QRXd  S)Nr   )
r   r   r   rq   r   popnotifyr   rL   r   )r   r=   r   r   r   r   r     s    
zIMapIterator._setc          	   C   sJ   |  j  : | |  _ |  j |  j k r? |  j  j   |  j |  j =Wd  QRXd  S)N)r   r   r   r   rL   r   )r   r   r   r   r   r     s
    
	zIMapIterator._set_length)	r   r   r   r   r   r   __next__r   r   r   r   r   r   r     s   
r   c               @   s   e  Z d  Z d d   Z d S)r   c          
   C   s`   |  j  P |  j j |  |  j d 7_ |  j  j   |  j |  j k rU |  j |  j =Wd  QRXd  S)Nr   )r   r   rq   r   r   r   rL   r   )r   r=   r   r   r   r   r     s    
zIMapUnorderedIterator._setN)r   r   r   r   r   r   r   r   r     s   r   c               @   s[   e  Z d  Z d Z e d d    Z d d f  d d  Z d d   Z e d	 d
    Z d S)r   Fc              O   s   d d l  m } | |  |   S)Nr   )rE   )ZdummyrE   )r   r?   rE   r   r   r   rE     s    zThreadPool.ProcessNc             C   s   t  j |  | | |  d  S)N)r   r   )r   ri   r9   r:   r   r   r   r     s    zThreadPool.__init__c             C   s@   t  j   |  _ t  j   |  _ |  j j |  _ |  j j |  _ d  S)N)rI   rJ   rg   ra   r,   r`   r-   rd   )r   r   r   r   rH     s    zThreadPool._setup_queuesc          
   C   sF   |  j  6 |  j j   |  j j d  g |  |  j  j   Wd  QRXd  S)N)Z	not_emptyrI   clearextendZ
notify_all)r7   r   r   r   r   r   r     s    
zThreadPool._help_stuff_finish)	r   r   r   rp   r   rE   r   rH   r   r   r   r   r   r     s
   )"__all__rZ   rI   r   r   rR   r   r   r   r   r   r   rM   r   r   countr   r   r   r4   r   r   r!   r$   rC   r5   objectr   r   ZAsyncResultr   r   r   r   r   r   r   r   <module>
   s<   		* &%@