Ë
    òT•jø  ã                   ó°  — 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Zddl	Z	ddl
mZ ddl
mZmZ ddlmZ dZd	Zd
ZdZ ej(                  «       Zd„ Zd„ Z G d„ de«      Z G d„ d«      Zd„ Z G d„ de«      Z	 	 d#d„Zd„ Z G d„ de«      Z  G d„ d e!«      Z" G d„ de!«      Z#e#Z$ G d„ de#«      Z% G d„ de!«      Z& G d „ d!e&«      Z' G d"„ de"«      Z(y)$ÚPoolÚ
ThreadPoolé    Né   )Úutil)Úget_contextÚTimeoutError)ÚwaitÚINITÚRUNÚCLOSEÚ	TERMINATEc                 ó$   — t        t        | Ž «      S ©N)ÚlistÚmap©Úargss    ú+/usr/lib/python3.12/multiprocessing/pool.pyÚmapstarr   /   s   € Ü”�T�
ÓÐó    c                 óL   — t        t        j                  | d   | d   «      «      S )Nr   r   )r   Ú	itertoolsÚstarmapr   s    r   Ústarmapstarr   2   s"   € Ü”	×!Ñ! $ q¡'¨4°©7Ó3Ó4Ð4r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚRemoteTracebackc                 ó   — || _         y r   ©Útb)Úselfr   s     r   Ú__init__zRemoteTraceback.__init__:   s	   € Øˆ�r   c                 ó   — | j                   S r   r   ©r    s    r   Ú__str__zRemoteTraceback.__str__<   s   € Ø�w‰wˆr   N)Ú__name__Ú
__module__Ú__qualname__r!   r$   © r   r   r   r   9   s   „ òór   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚExceptionWithTracebackc                 óˆ   — t        j                  t        |«      ||«      }dj                  |«      }|| _        d|z  | _        y )NÚ z

"""
%s""")Ú	tracebackÚformat_exceptionÚtypeÚjoinÚexcr   )r    r1   r   s      r   r!   zExceptionWithTraceback.__init__@   s:   € Ü×'Ñ'¬¨S«	°3¸Ó;ˆØ�W‰W�R‹[ˆØˆŒØ  2Ñ%ˆ�r   c                 ó>   — t         | j                  | j                  ffS r   )Úrebuild_excr1   r   r#   s    r   Ú
__reduce__z!ExceptionWithTraceback.__reduce__E   s   € Ü˜TŸX™X t§w¡wÐ/Ð/Ð/r   N)r%   r&   r'   r!   r4   r(   r   r   r*   r*   ?   s   „ ò&ó
0r   r*   c                 ó&   — t        |«      | _        | S r   )r   Ú	__cause__)r1   r   s     r   r3   r3   H   s   € Ü# BÓ'€C„MØ€Jr   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚMaybeEncodingErrorzVWraps possible unpickleable errors, so they can be
    safely sent through the socket.c                 ó–   •— t        |«      | _        t        |«      | _        t        t        | �  | j                  | j                  «       y r   )Úreprr1   ÚvalueÚsuperr8   r!   )r    r1   r;   Ú	__class__s      €r   r!   zMaybeEncodingError.__init__T   s3   ø€ Ü˜“9ˆŒÜ˜%“[ˆŒ
ÜÔ  $Ñ0°·±¸4¿:¹:ÕFr   c                 ó<   — d| j                   ›d| j                  ›d�S )NzError sending result: 'z'. Reason: 'ú')r;   r1   r#   s    r   r$   zMaybeEncodingError.__str__Y   s   � Ø=A¿Z»ZØ=A¿X»XðGð 	Gr   c                 ó<   — d| j                   j                  ›d| ›d�S )Nú<z: ú>)r=   r%   r#   s    r   Ú__repr__zMaybeEncodingError.__repr__]   s   � Ø!Ÿ^™^×4Ó4²dÐ;Ð;r   )r%   r&   r'   Ú__doc__r!   r$   rC   Ú__classcell__©r=   s   @r   r8   r8   P   s   ø„ ñ'ôGò
Gö<r   r8   c                 ó|  — |�/t        |t        «      r|dk\  st        dj                  |«      «      ‚|j                  }| j
                  }t        | d«      r4| j                  j                  «        |j                  j                  «        |� ||Ž  d}|�|r`||k  r[	  |«       }	|	€t        j                  d«       n;|	\  }
}}}}	 d ||i |¤Žf}	  ||
||f«       d x}	x}
x}x}x}}|dz  }|€ŒS|r||k  rŒ[t        j                  d
|z  «       y # t        t        f$ r t        j                  d«       Y Œ?w xY w# t        $ r.}|r|t        urt!        ||j"                  «      }d|f}Y d }~Œ�d }~ww xY w# t        $ r>}t%        ||d   «      }t        j                  d	|z  «        ||
|d|ff«       Y d }~ŒÛd }~ww xY w)Nr   zMaxtasks {!r} is not validÚ_writerr   z)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFz0Possible encoding error while sending result: %szworker exiting after %d tasks)Ú
isinstanceÚintÚAssertionErrorÚformatÚputÚgetÚhasattrrH   ÚcloseÚ_readerÚEOFErrorÚOSErrorr   ÚdebugÚ	ExceptionÚ_helper_reraises_exceptionr*   Ú__traceback__r8   )ÚinqueueÚoutqueueÚinitializerÚinitargsÚmaxtasksÚwrap_exceptionrM   rN   Ú	completedÚtaskÚjobÚiÚfuncr   ÚkwdsÚresultÚeÚwrappeds                     r   Úworkerrg   a   sç  € àÐ¤z°(¼CÔ'@Ø+3°qª=ÜÐ9×@Ñ@ÀÓJÓKÐKØ
�,‰,€CØ
�+‰+€CÜˆw˜	Ô"Ø�‰×ÑÔØ×Ñ×ÑÔ àÐÙ�XÑà€IØ
Ð
™x¨I¸Ò,@ð	Ù“5ˆDð
 ˆ<Ü�J‰JÐ7Ô8Øà#'Ñ ˆˆQ��d˜Dð	 Ø™D $Ð/¨$Ñ/Ð0ˆFð
	,Ù��a˜Ð Ô!ð 48Ð7ˆÐ7ˆsÐ7�VÐ7˜dÐ7 T¨DØ�Q‰ˆ	ð7 Ñ
™x¨I¸Ó,@ô8 	‡J�JÐ.°Ñ:Õ;øô3 œ'Ð"ò 	Ü�J‰JÐBÔCÙð	ûô ò 	 Ù $Ô.HÑ"HÜ*¨1¨a¯o©oÓ>�Ø˜Q�Z�Fûð	 ûô ò 	,Ü(¨¨F°1©IÓ6ˆGÜ�J‰JÐIØñô á��a˜% Ð)Ð*×+Ñ+ûð		,úsB   ÂD Ã
D: ÃE4 Ä$D7Ä6D7Ä:	E1Å$E,Å,E1Å4	F;Å=4F6Æ6F;c                 ó   — | ‚)z@Pickle-able helper function for use by _guarded_task_generation.r(   )Úexs    r   rV   rV   Ž   s   € à
€Hr   c                   ó2   ‡ — e Zd ZdZddœˆ fd„
Zˆ fd„Zˆ xZS )Ú
_PoolCachezò
    Class that implements a cache for the Pool class that will notify
    the pool management threads every time the cache is emptied. The
    notification is done by the use of a queue that is provided when
    instantiating the cache.
    N©Únotifierc               ó2   •— || _         t        ‰| �  |i |¤Ž y r   )rm   r<   r!   )r    rm   r   rc   r=   s       €r   r!   z_PoolCache.__init__�   s   ø€ Ø ˆŒÜ‰Ñ˜$Ð' $Ó'r   c                 ó`   •— t         ‰| �  |«       | s| j                  j                  d «       y y r   )r<   Ú__delitem__rm   rM   )r    Úitemr=   s     €r   rp   z_PoolCache.__delitem__¡   s,   ø€ Ü‰Ñ˜DÔ!ñ Ø�M‰M×Ñ˜dÕ#ð r   )r%   r&   r'   rD   r!   rp   rE   rF   s   @r   rk   rk   –   s   ø„ ñð +/ö (÷
$ð 
$r   rk   c                   óª  — e Zd ZdZdZed„ «       Z	 	 d(d„Zej                  e
fd„Zd„ Zd	„ Zed
„ «       Zed„ «       Zd„ Zed„ «       Zed„ «       Zd„ Zd„ Zdi fd„Zd)d„Zd)d„Z	 	 d*d„Zd„ Zd+d„Zd+d„Zdi ddfd„Z	 	 d*d„Z	 	 d*d„Zed)d„«       Ze d„ «       Z!ed„ «       Z"ed„ «       Z#ed„ «       Z$d „ Z%d!„ Z&d"„ Z'd#„ Z(ed$„ «       Z)e d%„ «       Z*d&„ Z+d'„ Z,y),r   zS
    Class which supports an async version of applying functions to arguments.
    Tc                 ó&   —  | j                   |i |¤ŽS r   ©ÚProcess)Úctxr   rc   s      r   ru   zPool.Process³   s   € àˆs�{‰{˜DÐ) DÑ)Ð)r   Nr(   c                 óˆ  — g | _         t        | _        |xs
 t        «       | _        | j                  «        t        j                  «       | _        | j                  j                  «       | _	        t        | j                  ¬«      | _        || _        || _        || _        |€t        j                   «       xs d}|dk  rt#        d«      ‚|� t%        |t&        «      r|dk  rt#        d«      ‚|�t)        |«      st+        d«      ‚|| _        	 | j/                  «        | j9                  «       }t;        j<                  t>        j@                  | j                  | j                  | j                  | jB                  | j,                  | j                   | jD                  | jF                  | j                  | j                  | j                  | jH                  || j                  f¬«      | _%        d| jJ                  _&        tN        | jJ                  _        | jJ                  jQ                  «        t;        j<                  t>        jR                  | j                  | jT                  | jF                  | j                   | j                  f¬«      | _+        d| jV                  _&        tN        | jV                  _        | jV                  jQ                  «        t;        j<                  t>        jX                  | jF                  | jZ                  | j                  f¬«      | _.        d| j\                  _&        tN        | j\                  _        | j\                  jQ                  «        t_        j`                  | | jb                  | j                  | jD                  | jF                  | j                   | j                  | jJ                  | jV                  | j\                  | j                  f	d	¬
«      | _2        tN        | _        y # t0        $ rQ | j                   D ]  }|j2                  �Œ|j5                  «        Œ! | j                   D ]  }|j7                  «        Œ ‚ w xY w)Nrl   r   z&Number of processes must be at least 1r   z/maxtasksperchild must be a positive int or Nonezinitializer must be a callable©Útargetr   Té   )r   Úexitpriority)3Ú_poolr
   Ú_stater   Ú_ctxÚ_setup_queuesÚqueueÚSimpleQueueÚ
_taskqueueÚ_change_notifierrk   Ú_cacheÚ_maxtasksperchildÚ_initializerÚ	_initargsÚosÚ	cpu_countÚ
ValueErrorrI   rJ   ÚcallableÚ	TypeErrorÚ
_processesÚ_repopulate_poolrU   ÚexitcodeÚ	terminater0   Ú_get_sentinelsÚ	threadingÚThreadr   Ú_handle_workersru   Ú_inqueueÚ	_outqueueÚ_wrap_exceptionÚ_worker_handlerÚdaemonr   ÚstartÚ_handle_tasksÚ
_quick_putÚ_task_handlerÚ_handle_resultsÚ
_quick_getÚ_result_handlerr   ÚFinalizeÚ_terminate_poolÚ
_terminate)r    Ú	processesrZ   r[   ÚmaxtasksperchildÚcontextÚpÚ	sentinelss           r   r!   zPool.__init__·   sV  € ð ˆŒ
ÜˆŒàÒ,œ{›}ˆŒ	Ø×ÑÔÜ×+Ñ+Ó-ˆŒð !%§	¡	× 5Ñ 5Ó 7ˆÔÜ ¨$×*?Ñ*?Ô@ˆŒØ!1ˆÔØ'ˆÔØ!ˆŒàÐÜŸ™›Ò+¨!ˆIØ�qŠ=ÜÐEÓFÐFØÐ'ÜÐ.´Ô4Ð8HÈAÒ8MÜ Ð!RÓSÐSàÐ"¬8°KÔ+@ÜÐ<Ó=Ð=à#ˆŒð	Ø×!Ñ!Ô#ð ×'Ñ'Ó)ˆ	ä(×/Ñ/Ü×'Ñ'Ø—+‘+˜tŸ™°·	±	¸4¿<¹<Ø—/‘/ 4§:¡:¨t¯}©}¸d¿n¹nØ×#Ñ# T§^¡^°T×5KÑ5KØ×&Ñ&¨	°4×3HÑ3HðJô ˆÔð '+ˆ×ÑÔ#Ü&)ˆ×ÑÔ#Ø×Ñ×"Ñ"Ô$ô '×-Ñ-Ü×%Ñ%Ø—/‘/ 4§?¡?°D·N±NØ—*‘*˜dŸk™kð+ôˆÔð
 %)ˆ×ÑÔ!Ü$'ˆ×ÑÔ!Ø×Ñ× Ñ Ô"ä(×/Ñ/Ü×'Ñ'Ø—.‘. $§/¡/°4·;±;Ð?ô ˆÔð '+ˆ×ÑÔ#Ü&)ˆ×ÑÔ#Ø×Ñ×"Ñ"Ô$äŸ-™-Ø�$×&Ñ&Ø—/‘/ 4§=¡=°$·.±.À$Ç*Á*Ø×'Ñ'¨×)=Ñ)=¸t×?QÑ?QØ×&Ñ&¨¯©ð5ð ôˆŒô ˆ�øô] ò 	Ø—Z‘Zò "�Ø—:‘:Ñ%Ø—K‘K•Mð"ð —Z‘Zò �Ø—‘•ðàð	ús   Ä
O' Ï'$QÐ5Qc                 óš   — | j                   |k(  r< |d| ›�t        | ¬«       t        | dd «      �| j                  j	                  d «       y y y )Nz&unclosed running multiprocessing pool )Úsourcerƒ   )r}   ÚResourceWarningÚgetattrrƒ   rM   )r    Ú_warnr   s      r   Ú__del__zPool.__del__
  sT   € Ø�;‰;˜#ÒÙÐ:¸4¸(ÐCÜ!¨$õ0ä�tÐ/°Ó6ÐBØ×%Ñ%×)Ñ)¨$Õ/ð Cð r   c           
      óš   — | j                   }d|j                  › d|j                  › d| j                  › dt	        | j
                  «      › d�	S )NrA   ú.z state=z pool_size=rB   )r=   r&   r'   r}   Úlenr|   )r    Úclss     r   rC   zPool.__repr__  sQ   € Ø�n‰nˆØ�C—N‘NÐ# 1 S×%5Ñ%5Ð$6ð 7ØŸ™˜ð &Ü  §¡›_Ð-¨Qð0ð 	1r   c                 ój   — | j                   j                  g}| j                  j                  g}g |¢|¢S r   )r–   rQ   rƒ   )r    Útask_queue_sentinelsÚself_notifier_sentinelss      r   r‘   zPool._get_sentinels  s<   € Ø $§¡× 6Ñ 6Ð7ÐØ#'×#8Ñ#8×#@Ñ#@Ð"AÐØ@Ð%Ð@Ð(?Ð@Ð@r   c                 óX   — | D �cg c]  }t        |d«      r|j                  ‘Œ c}S c c}w )NÚsentinel)rO   r·   )Úworkersrg   s     r   Ú_get_worker_sentinelszPool._get_worker_sentinels  s1   € ð ö8 FÜ" 6¨:Ô6ð —“ò 8ð 	8ùò 8s   …'c                 óÌ   — d}t        t        t        | «      «      «      D ]A  }| |   }|j                  €Œt	        j
                  d|z  «       |j                  «        d}| |= ŒC |S )z�Cleanup after any worker processes which have exited due to reaching
        their specified lifetime.  Returns True if any workers were cleaned up.
        Fúcleaning up worker %dT)ÚreversedÚranger±   r�   r   rT   r0   )ÚpoolÚcleanedra   rg   s       r   Ú_join_exited_workerszPool._join_exited_workers!  sg   € ð
 ˆÜœ%¤ D£	Ó*Ó+ò 	ˆAØ˜!‘WˆFØ�‰Ñ*ä—
‘
Ð2°QÑ6Ô7Ø—‘”Ø�Ø˜‘Gð	ð ˆr   c                 óþ   — | j                  | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  «
      S r   )Ú_repopulate_pool_staticr~   ru   r�   r|   r•   r–   r†   r‡   r…   r—   r#   s    r   rŽ   zPool._repopulate_pool1  s_   € Ø×+Ñ+¨D¯I©I°t·|±|Ø,0¯O©OØ,0¯J©J¸¿¹Ø,0¯N©N¸D×<MÑ<MØ,0¯N©NØ,0×,BÑ,BØ,0×,@Ñ,@óBð 	Br   c
                 ó"  — t        |t        |«      z
  «      D ]u  }
 || t        ||||||	f¬«      }|j                  j	                  dd«      |_        d|_        |j                  «        |j                  |«       t        j                  d«       Œw y)z€Bring the number of pool processes up to the specified number,
        for use after reaping workers which have exited.
        rx   ru   Ú
PoolWorkerTzadded workerN)
r½   r±   rg   ÚnameÚreplacer™   rš   Úappendr   rT   )rv   ru   r¤   r¾   rX   rY   rZ   r[   r¥   r]   ra   Úws               r   rÂ   zPool._repopulate_pool_static:  s„   € ô �y¤3 t£9Ñ,Ó-ò 
	'ˆAÙ˜¤FØ% xØ)Ø&Ð(8Ø,ð.ô/ˆAð
 —V‘V—^‘^ I¨|Ó<ˆAŒFØˆAŒHØ�G‰GŒIØ�K‰K˜ŒNÜ�J‰J�~Õ&ñ
	'r   c
                 ól   — t         j                  |«      rt         j                  | |||||||||	«
       yy)zEClean up any exited workers and start replacements for them.
        N)r   rÀ   rÂ   )
rv   ru   r¤   r¾   rX   rY   rZ   r[   r¥   r]   s
             r   Ú_maintain_poolzPool._maintain_poolM  s=   € ô ×$Ñ$ TÔ*Ü×(Ñ(¨¨g°yÀ$Ø)0°(¸KØ)1Ð3CØ)7õ9ð +r   c                 ó  — | j                   j                  «       | _        | j                   j                  «       | _        | j                  j                  j
                  | _        | j                  j                  j                  | _	        y r   )
r~   r�   r•   r–   rH   Úsendrœ   rQ   ÚrecvrŸ   r#   s    r   r   zPool._setup_queuesY  sX   € ØŸ	™	×-Ñ-Ó/ˆŒØŸ™×.Ñ.Ó0ˆŒØŸ-™-×/Ñ/×4Ñ4ˆŒØŸ.™.×0Ñ0×5Ñ5ˆ�r   c                 ó@   — | j                   t        k7  rt        d«      ‚y )NzPool not running)r}   r   rŠ   r#   s    r   Ú_check_runningzPool._check_running_  s   € Ø�;‰;œ#ÒÜÐ/Ó0Ð0ð r   c                 óD   — | j                  |||«      j                  «       S )zT
        Equivalent of `func(*args, **kwds)`.
        Pool must be running.
        )Úapply_asyncrN   )r    rb   r   rc   s       r   Úapplyz
Pool.applyc  s"   € ð
 ×Ñ  d¨DÓ1×5Ñ5Ó7Ð7r   c                 óN   — | j                  ||t        |«      j                  «       S )zx
        Apply `func` to each element in `iterable`, collecting the results
        in a list that is returned.
        )Ú
_map_asyncr   rN   ©r    rb   ÚiterableÚ	chunksizes       r   r   zPool.mapj  s"   € ð
 �‰˜t X¬w¸	ÓB×FÑFÓHÐHr   c                 óN   — | 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).
        )rÔ   r   rN   rÕ   s       r   r   zPool.starmapq  s"   € ð �‰˜t X¬{¸IÓF×JÑJÓLÐLr   c                 ó6   — | j                  ||t        |||«      S )z=
        Asynchronous version of `starmap()` method.
        )rÔ   r   ©r    rb   rÖ   r×   ÚcallbackÚerror_callbacks         r   Ústarmap_asynczPool.starmap_asyncy  s"   € ð
 �‰˜t X¬{¸IØ'¨ó9ð 	9r   c              #   óš   K  — 	 d}t        |«      D ]  \  }}||||fi f–— Œ y# t        $ r}|dz   t        |fi f–— Y d}~yd}~ww xY w­w)zšProvides a generator of tasks for imap and imap_unordered with
        appropriate handling for iterables which throw exceptions during
        iteration.éÿÿÿÿr   N)Ú	enumeraterU   rV   )r    Ú
result_jobrb   rÖ   ra   Úxre   s          r   Ú_guarded_task_generationzPool._guarded_task_generation�  se   è ø€ ð	JØˆAÜ! (Ó+ò 6‘��1Ø! 1 d¨Q¨D°"Ð5Ó5ñ6øäò 	JØ˜q ™sÔ$>ÀÀÀbÐI×Iûð	Jüs)   ‚A„$ £A¤	A­A¾AÁAÁAc                 óê  — | j                  «        |dk(  rOt        | «      }| j                  j                  | j	                  |j
                  ||«      |j                  f«       |S |dk  rt        dj                  |«      «      ‚t        j                  |||«      }t        | «      }| j                  j                  | j	                  |j
                  t        |«      |j                  f«       d„ |D «       S )zP
        Equivalent of `map()` -- can be MUCH slower than `Pool.map()`.
        r   zChunksize must be 1+, not {0:n}c              3   ó.   K  — | ]  }|D ]  }|–— Œ Œ y ­wr   r(   ©Ú.0Úchunkrq   s      r   ú	<genexpr>zPool.imap.<locals>.<genexpr>§  ó   è ø€ Ò?˜U¸Ò?°”DÐ?�DÑ?ùó   ‚)rÏ   ÚIMapIteratorr‚   rM   rã   Ú_jobÚ_set_lengthrŠ   rL   r   Ú
_get_tasksr   ©r    rb   rÖ   r×   rd   Útask_batchess         r   Úimapz	Pool.imapŒ  sì   € ð 	×ÑÔØ˜Š>Ü! $Ó'ˆFØ�O‰O×Ñà×1Ñ1°&·+±+¸tÀXÓNØ×&Ñ&ðôð
 ˆMà˜1Š}Ü Ø5×<Ñ<Ø!ó#ó$ð $ô  Ÿ?™?¨4°¸9ÓEˆLÜ! $Ó'ˆFØ�O‰O×Ñà×1Ñ1°&·+±+Ü29Ø2>ó@ð ×&Ñ&ð	ôñ @ fÔ?Ð?r   c                 óê  — | j                  «        |dk(  rOt        | «      }| j                  j                  | j	                  |j
                  ||«      |j                  f«       |S |dk  rt        dj                  |«      «      ‚t        j                  |||«      }t        | «      }| j                  j                  | j	                  |j
                  t        |«      |j                  f«       d„ |D «       S )zL
        Like `imap()` method but ordering of results is arbitrary.
        r   zChunksize must be 1+, not {0!r}c              3   ó.   K  — | ]  }|D ]  }|–— Œ Œ y ­wr   r(   ræ   s      r   ré   z&Pool.imap_unordered.<locals>.<genexpr>Ã  rê   rë   )rÏ   ÚIMapUnorderedIteratorr‚   rM   rã   rí   rî   rŠ   rL   r   rï   r   rð   s         r   Úimap_unorderedzPool.imap_unordered©  sé   € ð 	×ÑÔØ˜Š>Ü*¨4Ó0ˆFØ�O‰O×Ñà×1Ñ1°&·+±+¸tÀXÓNØ×&Ñ&ðôð
 ˆMà˜1Š}Ü Ø5×<Ñ<¸YÓGóIð IäŸ?™?¨4°¸9ÓEˆLÜ*¨4Ó0ˆFØ�O‰O×Ñà×1Ñ1°&·+±+Ü29Ø2>ó@ð ×&Ñ&ð	ôñ @ fÔ?Ð?r   c                 óš   — | j                  «        t        | ||«      }| j                  j                  |j                  d|||fgdf«       |S )z;
        Asynchronous version of `apply()` method.
        r   N)rÏ   ÚApplyResultr‚   rM   rí   )r    rb   r   rc   rÛ   rÜ   rd   s          r   rÑ   zPool.apply_asyncÅ  sL   € ð
 	×ÑÔÜ˜T 8¨^Ó<ˆØ�‰×Ñ˜vŸ{™{¨A¨t°T¸4Ð@ÐAÀ4ÐHÔIØˆr   c                 ó6   — | j                  ||t        |||«      S )z9
        Asynchronous version of `map()` method.
        )rÔ   r   rÚ   s         r   Ú	map_asynczPool.map_asyncÏ  s"   € ð
 �‰˜t X¬w¸	À8Øóð 	r   c                 ó²  — | j                  «        t        |d«      st        |«      }|€5t        t	        |«      t	        | j
                  «      dz  «      \  }}|r|dz  }t	        |«      dk(  rd}t        j                  |||«      }t        | |t	        |«      ||¬«      }	| j                  j                  | j                  |	j                  ||«      df«       |	S )zY
        Helper function to implement map, starmap and their async counterparts.
        Ú__len__Né   r   r   ©rÜ   )rÏ   rO   r   Údivmodr±   r|   r   rï   Ú	MapResultr‚   rM   rã   rí   )
r    rb   rÖ   Úmapperr×   rÛ   rÜ   Úextrarñ   rd   s
             r   rÔ   zPool._map_async×  sÐ   € ð
 	×ÑÔÜ�x Ô+Ü˜H“~ˆHàÐÜ%¤c¨(£m´S¸¿¹³_ÀqÑ5HÓIÑˆI�uÙØ˜Q‘�	Üˆx‹=˜AÒØˆIä—‘ t¨X°yÓAˆÜ˜4 ¬C°«M¸8Ø*8ô:ˆà�‰×Ñà×-Ñ-¨f¯k©kØ.4Ø.:ó<ð ð	ô	
ð ˆr   c                 ó‚   — t        | |¬«       |j                  «       s"|j                  «        |j                  «       sŒ!y y )N)Útimeout)r	   ÚemptyrN   )r¨   Úchange_notifierr  s      r   Ú_wait_for_updateszPool._wait_for_updatesô  s2   € äˆY Õ(Ø!×'Ñ'Ô)Ø×ÑÔ!ð "×'Ñ'×)r   c                 óž  — t        j                  «       }|j                  t        k(  s|r~|j                  t        k7  rk| j                  |||||||	|
||«
       g | j                  |«      ¢|¢}| j                  ||«       |j                  t        k(  rŒU|r|j                  t        k7  rŒk|j                  d «       t        j                  d«       y )Nzworker handler exiting)r’   Úcurrent_threadr}   r   r   rÊ   r¹   r  rM   r   rT   )r²   ÚcacheÚ	taskqueuerv   ru   r¤   r¾   rX   rY   rZ   r[   r¥   r]   r¨   r  ÚthreadÚcurrent_sentinelss                    r   r”   zPool._handle_workersú  s·   € ô
 ×)Ñ)Ó+ˆð �m‰mœsÒ"¡u°·±Ä)Ò1KØ×Ñ˜s G¨Y¸¸gØ'¨°hØ/°ôAð !O #×";Ñ";¸DÓ"AÐ NÀIÐ NÐà×!Ñ!Ð"3°_ÔEð �m‰mœsÓ"¡u°·±Ä)Ó1Kð 	�‰�dÔÜ�
‰
Ð+Õ,r   c                 ó0  — t        j                  «       }t        | j                  d «      D ]}  \  }}d }	 |D ]5  }|j                  t
        k7  rt        j                  d«        n>	  ||«       Œ7 |r)t        j                  d«       |r|d   nd} ||dz   «       	 d x}x}}
Œv	 d x}x}}
 n t        j                  d«       	 t        j                  d«       |j                  d «       t        j                  d	«       |D ]
  } |d «       Œ 	 t        j                  d«       y # t        $ r;}	|d d \  }
}	 ||
   j                  |d|	f«       n# t        $ r Y nw xY wY d }	~	�Œ+d }	~	ww xY w# d x}x}}
w xY w# t        $ r t        j                  d
«       Y Œˆw xY w)Nz'task handler found thread._state != RUNé   Fzdoing set_length()r   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 exiting)r’   r	  ÚiterrN   r}   r   r   rT   rU   Ú_setÚKeyErrorrM   rS   )r  rM   rY   r¾   r
  r  ÚtaskseqÚ
set_lengthr_   re   r`   Úidxr§   s                r   r›   zPool._handle_tasks  s¤  € ä×)Ñ)Ó+ˆä#'¨	¯©°tÓ#<ò 	4ÑˆG�ZØˆDð,à#ò �DØ—}‘}¬Ò+ÜŸ
™
Ð#LÔMÙð!Ù˜D�	ðñ "ÜŸ
™
Ð#7Ô8Ù)-˜d 1šg°2˜Ù" 3¨¡7Ô+Øð (,Ð+�Ð+�w¡ð à'+Ð+�Ð+�w¢ð1	4ô4 �J‰JÐ2Ô3ð
	Jä�J‰JÐHÔIØ�L‰L˜Ôô �J‰JÐAÔBØò �Ù�D•	ñô
 	�
‰
Ð)Õ*øô= %ò !Ø#'¨¨ 8™˜˜Sð!Ø! #™JŸO™O¨C°%¸°Õ<øÜ'ò !Ù ð!ÿüð	!ûð (,Ð+�Ð+�w¡ûô ò 	JÜ�J‰JÐHÖIð	Júsl   ´/E)Á$D"Á,-E)ÃA
E4 Ä"	E&Ä+E!Ä4EÅE!Å	E	ÅE!ÅE	ÅE!ÅE)Å!E&Å&E)Å)E1Å4FÆFc                 ó$  — t        j                  «       }	 	  |«       }|j                  t        k7  r0|j                  t        k(  sJ d«       ‚t	        j
                  d«       n;|€t	        j
                  d«       n#|\  }}}	 ||   j                  ||«       d x}x}}Œ†|rk|j                  t        k7  rX	  |«       }|€t	        j
                  d«       Œ5|\  }}}	 ||   j                  ||«       d x}x}}|r|j                  t        k7  rŒXt        | d«      rIt	        j
                  d«       	 t        d«      D ]%  }| j                  j                  «       s n	 |«        Œ' t	        j
                  d	t        |«      |j                  «       y # t        t        f$ r t	        j
                  d«       Y y w xY w# t        $ r Y �Œ*w xY w# t        t        f$ r t	        j
                  d«       Y y w xY w# t        $ r Y �Œw xY w# t        t        f$ r Y Œ°w xY w)
Nz.result handler got EOFError/OSError -- exitingzThread not in TERMINATEz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelrQ   z"ensuring that outqueue is not fullé
   z7result handler exiting: len(cache)=%s, thread._state=%s)r’   r	  rS   rR   r   rT   r}   r   r   r  r  rO   r½   rQ   Úpollr±   )rY   rN   r
  r  r_   r`   ra   Úobjs           r   rž   zPool._handle_results=  s  € ä×)Ñ)Ó+ˆàðÙ“u�ð
 �}‰}¤Ò#Ø—}‘}¬	Ò1ÐLÐ3LÓLÐ1Ü—
‘
ÐIÔJØàˆ|Ü—
‘
Ð8Ô9Øà‰KˆC��CðØ�c‘
—‘  3Ô'ð  $Ð#ˆDÐ#�3˜ð+ ñ. ˜Ÿ™¬Ò2ðÙ“u�ð
 ˆ|Ü—
‘
ÐCÔDØØ‰KˆC��CðØ�c‘
—‘  3Ô'ð  $Ð#ˆDÐ#�3˜ñ ˜Ÿ™¬Ó2ô" �8˜YÔ'Ü�J‰JÐ;Ô<ðÜ˜r›ò �AØ#×+Ñ+×0Ñ0Ô2ÙÙ•Eðô 	�
‰
ÐLÜ�%‹j˜&Ÿ-™-õ	)øôe œXÐ&ò Ü—
‘
ÐKÔLÙðûô  ò Úðûô œXÐ&ò Ü—
‘
ÐKÔLÙðûô ò Úðûô œXÐ&ò ÙðúsY   —F	 Â F3 Â2G ÃG- Ä+3G= Æ	$F0Æ/F0Æ3	G Æ?G Ç$G*Ç)G*Ç-	G:Ç9G:Ç=HÈHc              #   ót   K  — t        |«      }	 t        t        j                  ||«      «      }|sy | |f–— Œ)­wr   )r  Útupler   Úislice)rb   ÚitÚsizerâ   s       r   rï   zPool._get_tasksy  s=   è ø€ ä�"‹XˆØÜ”i×&Ñ& r¨4Ó0Ó1ˆAÙØØ˜�)ŠOð	 ùs   ‚68c                 ó   — t        d«      ‚)Nz:pool objects cannot be passed between processes or pickled)ÚNotImplementedErrorr#   s    r   r4   zPool.__reduce__‚  s   € Ü!ØJóð 	r   c                 óÌ   — t        j                  d«       | j                  t        k(  r<t        | _        t        | j
                  _        | j                  j                  d «       y y )Nzclosing pool)r   rT   r}   r   r   r˜   rƒ   rM   r#   s    r   rP   z
Pool.close‡  sH   € Ü�
‰
�>Ô"Ø�;‰;œ#ÒÜˆDŒKÜ*/ˆD× Ñ Ô'Ø×!Ñ!×%Ñ% dÕ+ð r   c                 ód   — t        j                  d«       t        | _        | j	                  «        y )Nzterminating pool)r   rT   r   r}   r£   r#   s    r   r�   zPool.terminateŽ  s    € Ü�
‰
Ð%Ô&ÜˆŒØ�‰Õr   c                 óŽ  — t        j                  d«       | j                  t        k(  rt	        d«      ‚| j                  t
        t        fvrt	        d«      ‚| j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  D ]  }|j                  «        Œ y )Nzjoining poolzPool is still runningzIn unknown state)r   rT   r}   r   rŠ   r   r   r˜   r0   r�   r    r|   )r    r§   s     r   r0   z	Pool.join“  s•   € Ü�
‰
�>Ô"Ø�;‰;œ#ÒÜÐ4Ó5Ð5Ø�[‰[¤¬	Ð 2Ñ2ÜÐ/Ó0Ð0Ø×Ñ×!Ñ!Ô#Ø×Ñ×ÑÔ!Ø×Ñ×!Ñ!Ô#Ø—‘ò 	ˆAØ�F‰F�Hñ	r   c                 óp  — t        j                  d«       | j                  j                  «        |j	                  «       rw| j
                  j                  «       r\| j
                  j                  «        t        j                  d«       |j	                  «       r| j
                  j                  «       rŒZy y y y )Nz7removing tasks from inqueue until task handler finishedr   )
r   rT   Ú_rlockÚacquireÚis_aliverQ   r  rÍ   ÚtimeÚsleep)rX   Útask_handlerr  s      r   Ú_help_stuff_finishzPool._help_stuff_finishŸ  s}   € ô 	�
‰
ÐLÔMØ�‰×ÑÔ Ø×#Ñ#Ô%¨'¯/©/×*>Ñ*>Ô*@Ø�O‰O× Ñ Ô"Ü�J‰J�qŒMð ×#Ñ#Ô%¨'¯/©/×*>Ñ*>Ö*@Ð%Ð*@Ð%r   c
                 ód  — t        j                  d«       t        |_        |j	                  d «       t        |_        t        j                  d«       | j                  ||t        |«      «       |j                  «       st        |	«      dk7  rt        d«      ‚t        |_        |j	                  d «       |j	                  d «       t        j                  d«       t        j                  «       |ur|j                  «        |rHt        |d   d«      r9t        j                  d«       |D ]  }
|
j                  �Œ|
j                  «        Œ! t        j                  d«       t        j                  «       |ur|j                  «        t        j                  d	«       t        j                  «       |ur|j                  «        |rpt        |d   d«      r`t        j                  d
«       |D ]E  }
|
j                  «       sŒt        j                  d|
j                  z  «       |
j                  «        ŒG y y y )Nzfinalizing poolz&helping task handler/workers to finishr   z/Cannot have cache with result_handler not alivezjoining worker handlerr�   zterminating workerszjoining task handlerzjoining result handlerzjoining pool workersr»   )r   rT   r   r}   rM   r+  r±   r'  rK   r’   r	  r0   rO   r�   r�   Úpid)r²   r  rX   rY   r¾   r  Úworker_handlerr*  Úresult_handlerr
  r§   s              r   r¢   zPool._terminate_pool¨  s¾  € ô 	�
‰
Ð$Ô%ô
 !*ˆÔØ×Ñ˜DÔ!ä'ˆÔä�
‰
Ð;Ô<Ø×Ñ˜w¨´c¸$³iÔ@à×'Ñ'Ô)´°E³
¸a²Ü ØAóCð Cô !*ˆÔØ×Ñ˜DÔ!Ø�‰�TÔô 	�
‰
Ð+Ô,Ü×#Ñ#Ó%¨^Ñ;Ø×ÑÔ!ñ ”G˜D ™G [Ô1Ü�J‰JÐ,Ô-Øò "�Ø—:‘:Ñ%Ø—K‘K•Mð"ô 	�
‰
Ð)Ô*Ü×#Ñ#Ó%¨\Ñ9Ø×ÑÔä�
‰
Ð+Ô,Ü×#Ñ#Ó%¨^Ñ;Ø×ÑÔ!á”G˜D ™G [Ô1Ü�J‰JÐ-Ô.Øò �Ø—:‘:•<ä—J‘JÐ6¸¿¹Ñ>Ô?Ø—F‘F•Hñ	ð 2ˆ4r   c                 ó&   — | j                  «        | S r   )rÏ   r#   s    r   Ú	__enter__zPool.__enter__Þ  s   € Ø×ÑÔØˆr   c                 ó$   — | j                  «        y r   )r�   )r    Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__zPool.__exit__â  s   € Ø�‰Õr   )NNr(   NNr   )NNN)r   )-r%   r&   r'   rD   r—   Ústaticmethodru   r!   ÚwarningsÚwarnr   r®   rC   r‘   r¹   rÀ   rŽ   rÂ   rÊ   r   rÏ   rÒ   r   r   rÝ   rã   rò   rö   rÑ   rú   rÔ   r  Úclassmethodr”   r›   rž   rï   r4   rP   r�   r0   r+  r¢   r1  r6  r(   r   r   r   r   ­   sÁ  „ ñð €Oàñ*ó ð*ð CEØ04óOðf %ŸM™M¨só 0ò1òAð
 ñ8ó ð8ð ñó ðòBð ñ'ó ð'ð$ ñ	9ó ð	9ò6ò1ð  "¨ó 8óIóMð FJØó9ò	Jó@ó:@ð8 &(¨b¸4Øóð BFØóð KOØóð: ò"ó ð"ð
 ñ-ó ð-ð( ñ++ó ð++ðZ ñ9)ó ð9)ðv ñó ðòò
,òò

ð ñó ðð ñ3ó ð3òjór   c                   óX   — e Zd Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Z e	e
j                  «      Zy)	rø   c                 óÜ   — || _         t        j                  «       | _        t	        t
        «      | _        |j                  | _        || _        || _	        | | j                  | j                  <   y r   )
r|   r’   ÚEventÚ_eventÚnextÚjob_counterrí   r„   Ú	_callbackÚ_error_callback)r    r¾   rÛ   rÜ   s       r   r!   zApplyResult.__init__ë  sO   € ØˆŒ
Ü—o‘oÓ'ˆŒÜœÓ%ˆŒ	Ø—k‘kˆŒØ!ˆŒØ-ˆÔØ!%ˆ�‰�D—I‘IÒr   c                 ó6   — | j                   j                  «       S r   )r>  Úis_setr#   s    r   ÚreadyzApplyResult.readyô  s   € Ø�{‰{×!Ñ!Ó#Ð#r   c                 ón   — | j                  «       st        dj                  | «      «      ‚| j                  S )Nz{0!r} not ready)rE  rŠ   rL   Ú_successr#   s    r   Ú
successfulzApplyResult.successful÷  s,   € Ø�z‰zŒ|ÜÐ.×5Ñ5°dÓ;Ó<Ð<Ø�}‰}Ðr   Nc                 ó:   — | j                   j                  |«       y r   )r>  r	   ©r    r  s     r   r	   zApplyResult.waitü  s   € Ø�‰×Ñ˜Õ!r   c                 ó˜   — | j                  |«       | j                  «       st        ‚| j                  r| j                  S | j                  ‚r   )r	   rE  r   rG  Ú_valuerJ  s     r   rN   zApplyResult.getÿ  s8   € Ø�	‰	�'ÔØ�z‰zŒ|ÜÐØ�=Š=Ø—;‘;Ðà—+‘+Ðr   c                 ó^  — |\  | _         | _        | j                  r'| j                   r| j                  | j                  «       | j                  r'| j                   s| j                  | j                  «       | j                  j                  «        | j                  | j                  = d | _        y r   )	rG  rL  rA  rB  r>  Úsetr„   rí   r|   ©r    ra   r  s      r   r  zApplyResult._set  ss   € Ø%(Ñ"ˆŒ�t”{Ø�>Š>˜dŸmšmØ�N‰N˜4Ÿ;™;Ô'Ø×Ò¨¯ªØ× Ñ  §¡Ô-Ø�‰�‰ÔØ�K‰K˜Ÿ	™	Ð"Øˆ�
r   r   )r%   r&   r'   r!   rE  rH  r	   rN   r  r:  ÚtypesÚGenericAliasÚ__class_getitem__r(   r   r   rø   rø   é  s3   „ ò&ò$òó
"óòñ $ E×$6Ñ$6Ó7Ñr   rø   c                   ó   — e Zd Zd„ Zd„ Zy)r   c                 ó  — t         j                  | |||¬«       d| _        d g|z  | _        || _        |dk  r9d| _        | j                  j                  «        | j                  | j                  = y ||z  t        ||z  «      z   | _        y )Nrþ   Tr   )rø   r!   rG  rL  Ú
_chunksizeÚ_number_leftr>  rN  r„   rí   Úbool)r    r¾   r×   ÚlengthrÛ   rÜ   s         r   r!   zMapResult.__init__  s‚   € Ü×Ñ˜T 4¨Ø,:ð 	ô 	<àˆŒØ�f˜v‘oˆŒØ#ˆŒØ˜Š>Ø !ˆDÔØ�K‰K�O‰OÔØ—‘˜DŸI™IÑ&à &¨	Ñ 1´D¸À)Ñ9KÓ4LÑ LˆDÕr   c                 ó¢  — | xj                   dz  c_         |\  }}|r¨| j                  rœ|| j                  || j                  z  |dz   | j                  z   | j                   dk(  r`| j                  r| j	                  | j                  «       | j
                  | j                  = | j                  j                  «        d | _	        y y |s| j                  rd| _        || _        | j                   dk(  r`| j                  r| j                  | j                  «       | j
                  | j                  = | j                  j                  «        d | _	        y y )Nr   r   F)rV  rG  rL  rU  rA  r„   rí   r>  rN  r|   rB  )r    ra   Úsuccess_resultÚsuccessrd   s        r   r  zMapResult._set)  s  € Ø×Ò˜QÑÕØ(‰ˆ�Ù�t—}’}ØCIˆD�K‰K˜˜$Ÿ/™/Ñ)¨1¨Q©3°·±Ñ*?Ð@Ø× Ñ  AÒ%Ø—>’>Ø—N‘N 4§;¡;Ô/Ø—K‘K §	¡	Ð*Ø—‘—‘Ô!Ø!�•
ð &ñ ˜tŸ}š}à %�”Ø$�”Ø× Ñ  AÒ%à×'Ò'Ø×(Ñ(¨¯©Ô5Ø—K‘K §	¡	Ð*Ø—‘—‘Ô!Ø!�•
ð &r   N)r%   r&   r'   r!   r  r(   r   r   r   r     s   „ òMó"r   r   c                   ó0   — e Zd Zd„ Zd„ Zdd„ZeZd„ Zd„ Zy)rì   c                 óB  — || _         t        j                  t        j                  «       «      | _        t        t        «      | _        |j                  | _        t        j                  «       | _        d| _        d | _        i | _        | | j                  | j                  <   y )Nr   )r|   r’   Ú	ConditionÚLockÚ_condr?  r@  rí   r„   ÚcollectionsÚdequeÚ_itemsÚ_indexÚ_lengthÚ	_unsorted)r    r¾   s     r   r!   zIMapIterator.__init__G  sp   € ØˆŒ
Ü×(Ñ(¬¯©Ó)9Ó:ˆŒ
ÜœÓ%ˆŒ	Ø—k‘kˆŒÜ!×'Ñ'Ó)ˆŒØˆŒØˆŒØˆŒØ!%ˆ�‰�D—I‘IÒr   c                 ó   — | S r   r(   r#   s    r   Ú__iter__zIMapIterator.__iter__R  s   € Øˆr   Nc                 óà  — | j                   5  	 | j                  j                  «       }d d d «       \  }}|r|S |‚# t        $ rœ | j                  | j
                  k(  rd | _        t        d ‚| j                   j                  |«       	 | j                  j                  «       }n;# t        $ r/ | j                  | j
                  k(  rd | _        t        d ‚t        d ‚w xY wY Œ·w xY w# 1 sw Y   Œ¼xY wr   )
r`  rc  ÚpopleftÚ
IndexErrorrd  re  r|   ÚStopIterationr	   r   )r    r  rq   r[  r;   s        r   r?  zIMapIterator.nextU  sß   € Ø�Z‰Zñ 	1ð1Ø—{‘{×*Ñ*Ó,�÷	1ð  ‰ˆ�ÙØˆLØˆøô! ò 1Ø—;‘; $§,¡,Ò.Ø!%�D”JÜ'¨TÐ1Ø—
‘
—‘ Ô(ð1ØŸ;™;×.Ñ.Ó0‘DøÜ!ò 1Ø—{‘{ d§l¡lÒ2Ø%)˜œ
Ü+°Ð5Ü&¨DÐ0ð	1úñ ð1ú÷	1ð 	1ús?   �C$�<¼AC!ÂB#Â"C!Â#8CÃC!ÃC$Ã C!Ã!C$Ã$C-c                 ó’  — | j                   5  | j                  |k(  rÑ| j                  j                  |«       | xj                  dz  c_        | j                  | j                  v rn| j                  j                  | j                  «      }| j                  j                  |«       | xj                  dz  c_        | j                  | j                  v rŒn| j                   j                  «        n|| j                  |<   | j                  | j                  k(  r| j                  | j                  = d | _
        d d d «       y # 1 sw Y   y xY w©Nr   )r`  rd  rc  rÇ   rf  ÚpopÚnotifyre  r„   rí   r|   rO  s      r   r  zIMapIterator._setm  së   € Ø�Z‰Zñ 	"Ø�{‰{˜aÒØ—‘×"Ñ" 3Ô'Ø—’˜qÑ •Ø—k‘k T§^¡^Ñ3ØŸ.™.×,Ñ,¨T¯[©[Ó9�CØ—K‘K×&Ñ& sÔ+Ø—K’K 1Ñ$•Kð —k‘k T§^¡^Ò3ð —
‘
×!Ñ!Õ#à$'�—‘˜qÑ!à�{‰{˜dŸl™lÒ*Ø—K‘K §	¡	Ð*Ø!�”
÷	"÷ 	"ñ 	"ús   �CD=ÃA!D=Ä=Ec                 óö   — | j                   5  || _        | j                  | j                  k(  r8| j                   j                  «        | j                  | j
                  = d | _        d d d «       y # 1 sw Y   y xY wr   )r`  re  rd  rp  r„   rí   r|   )r    rX  s     r   rî   zIMapIterator._set_length~  s\   € Ø�Z‰Zñ 	"Ø!ˆDŒLØ�{‰{˜dŸl™lÒ*Ø—
‘
×!Ñ!Ô#Ø—K‘K §	¡	Ð*Ø!�”
÷	"÷ 	"ñ 	"ús   �AA/Á/A8r   )	r%   r&   r'   r!   rh  r?  Ú__next__r  rî   r(   r   r   rì   rì   E  s"   „ ò	&òóð, €Hò"ó""r   rì   c                   ó   — e Zd Zd„ Zy)rõ   c                 óH  — | j                   5  | j                  j                  |«       | xj                  dz  c_        | j                   j	                  «        | j                  | j
                  k(  r| j                  | j                  = d | _        d d d «       y # 1 sw Y   y xY wrn  )	r`  rc  rÇ   rd  rp  re  r„   rí   r|   rO  s      r   r  zIMapUnorderedIterator._setŒ  su   € Ø�Z‰Zñ 	"Ø�K‰K×Ñ˜sÔ#Ø�KŠK˜1Ñ�KØ�J‰J×ÑÔØ�{‰{˜dŸl™lÒ*Ø—K‘K §	¡	Ð*Ø!�”
÷	"÷ 	"ñ 	"ús   �BBÂB!N)r%   r&   r'   r  r(   r   r   rõ   rõ   Š  s   „ ó"r   rõ   c                   óZ   — e Zd ZdZed„ «       Zd
d„Zd„ Zd„ Zed„ «       Z	ed„ «       Z
d	„ Zy)r   Fc                 ó   — ddl m}  ||i |¤ŽS )Nr   rt   )Údummyru   )rv   r   rc   ru   s       r   ru   zThreadPool.Processœ  s   € å"Ù˜Ð% Ñ%Ð%r   Nc                 ó4   — t         j                  | |||«       y r   )r   r!   )r    r¤   rZ   r[   s       r   r!   zThreadPool.__init__¡  s   € Ü�‰�d˜I {°HÕ=r   c                 óÔ   — t        j                  «       | _        t        j                  «       | _        | j                  j                  | _        | j                  j                  | _        y r   )r€   r�   r•   r–   rM   rœ   rN   rŸ   r#   s    r   r   zThreadPool._setup_queues¤  sD   € Ü×)Ñ)Ó+ˆŒÜ×*Ñ*Ó,ˆŒØŸ-™-×+Ñ+ˆŒØŸ.™.×,Ñ,ˆ�r   c                 ó0   — | j                   j                  gS r   )rƒ   rQ   r#   s    r   r‘   zThreadPool._get_sentinelsª  s   € Ø×%Ñ%×-Ñ-Ð.Ð.r   c                 ó   — g S r   r(   )r¸   s    r   r¹   z ThreadPool._get_worker_sentinels­  s   € àˆ	r   c                 ó¢   — 	 	 | j                  d¬«       Œ# t        j                  $ r Y nw xY wt        |«      D ]  }| j	                  d «       Œ y )NF)Úblock)rN   r€   ÚEmptyr½   rM   )rX   r*  r  ra   s       r   r+  zThreadPool._help_stuff_finish±  sR   € ð	ØØ—‘ %�Ô(ð øä�{‰{ò 	Ùð	úä�t“ò 	ˆAØ�K‰K˜Õñ	s   ‚ –,«,c                 ó.   — t        j                  |«       y r   )r(  r)  )r    r¨   r  r  s       r   r  zThreadPool._wait_for_updates¼  s   € Ü�
‰
�7Õr   )NNr(   )r%   r&   r'   r—   r7  ru   r!   r   r‘   r¹   r+  r  r(   r   r   r   r   ™  sU   „ Ø€Oàñ&ó ð&ó>ò-ò/ð ñó ðð ñó ðór   )Nr(   NF))Ú__all__ra  r   rˆ   r€   r’   r(  r-   rP  r8  r,   r   r   r   Ú
connectionr	   r
   r   r   r   Úcountr@  r   r   rU   r   r*   r3   r8   rg   rV   Údictrk   Úobjectr   rø   ÚAsyncResultr   rì   rõ   r   r(   r   r   ú<module>r†     s  ðð �<Ð
 €ó Û Û 	Û Û Û Û Û Û õ ß 'Ý ð €Ø€Ø€Ø€	ð ˆi�o‰oÓ€òò5ô�iô ÷0ñ 0òô<˜ô <ð" GKØó+<òZô$�ô $ô.vˆ6ô vôx)8�&ô )8ðV €ô%"�ô %"ôV?"�6ô ?"ôJ	"˜Lô 	"ô$�õ $r   