Ë
    ™Qjª ã                   ó2  — 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	Z	d dl
mZ d dlmZ ddlmZmZ ddlmZ ddlmZmZmZmZmZ ddlmZmZmZ dd	lmZ dd
lmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dlm(Z( d dl)m*Z*m+Z+ ddlm,Z,m-Z-m.Z. dZ/ej`                  d    dk(  Z1 ejd                  «       dk(  r	ddl3m4Z5 eZ6nd dlm7Z5 ejl                  Z6	 ejp                  Z8ej`                  dk\  rejt                  Z;nejv                  Z;d Z<dZ=dZ>d Z?dZ@dZAdZBdZCd ZDdZEdZF eGedd«      ZHdZI eGedd «      ZDdZJdZK ej˜                  «       ZMejœ                  ZNd„ ZOd„ ZPd „ ZQd!„ ZRdBd"„ZS G d#„ d$e;«      ZT G d%„ d&eU«      ZV G d'„ d(eU«      ZWd)„ ZX G d*„ d+«      ZY G d,„ d-e«      ZZ G d.„ d/eZ«      Z[ G d0„ d1eZ«      Z\ G d2„ d3eZ«      Z] G d4„ d5eZ«      Z^ G d6„ d7«      Z_ G d8„ d9«      Z` G d:„ d;e`«      Za G d<„ d=«      Zb G d>„ d?eb«      Zc G d@„ dAe_«      Zdy# e9$ r dZ8Y �Œ4w xY w)Cé    N)Údeque)Úpartialé   )Ú	cpu_countÚget_context)Úutil)ÚTERM_SIGNALÚhuman_statusÚpickle_loadsÚreset_signalsÚrestart_state)Ú	get_errnoÚmem_rssÚsend_offset)ÚExceptionInfo)ÚDummyProcess)ÚCoroStopÚRestartFreqExceededÚSoftTimeLimitExceededÚ
TerminatedÚTimeLimitExceededÚTimeoutErrorÚWorkerLostError©Ú	monotonic©ÚQueueÚEmpty)ÚFinalizeÚdebugÚwarningzEchild process exiting after exceeding memory limit ({0}KiB / {1}KiB)
é   ÚWindows)Úkill_processtree)Úkillg    _ B)r"   r"   é   é   é›   ÚSIGUSR1g      $@ÚEX_OKi,  çš™™™™™¹?c                 ó‚   — 	 | j                   }|€t        t         | j                  «       «      S |S # t        $ r d }Y Œ/w xY w©N)r   ÚAttributeErrorr   Úfileno)Ú
connectionÚnatives     úI/var/www/html/truck-me/venv/lib/python3.12/site-packages/billiard/pool.pyÚ_get_send_offsetr3   x   sJ   € ðØ×'Ñ'ˆð €~Ü”{ J×$5Ñ$5Ó$7Ó8Ð8Ø€Møô	 ò ØŠðús   ‚0 °>½>c                 ó$   — t        t        | Ž «      S r-   )ÚlistÚmap©Úargss    r2   Úmapstarr9   ‚   s   € Ü”�T�
ÓÐó    c                 óL   — t        t        j                  | d   | d   «      «      S )Nr   r   )r5   Ú	itertoolsÚstarmapr7   s    r2   Ústarmapstarr>   †   s"   € Ü”	×!Ñ! $ q¡'¨4°©7Ó3Ó4Ð4r:   c                 óT   —  t        j                  «       j                  | g|¢­i |¤Ž y r-   )r   Ú
get_loggerÚerror)Úmsgr8   Úkwargss      r2   rA   rA   Š   s#   € Ø„D‡O�OÓ×Ñ˜CÐ1 $Ò1¨&Ó1r:   c                 óT   — | t        j                  «       ur| j                  |«       y y r-   )Ú	threadingÚcurrent_threadÚstop)ÚthreadÚtimeouts     r2   Ústop_if_not_currentrJ   Ž   s$   € Ø”Y×-Ñ-Ó/Ñ/Ø�‰�GÕð 0r:   c                   óP   — e Zd ZdZd„ Zerdd„Zd„ Zd„ Zd„ Z	ydd„Zd	„ Zd
„ Zd„ Z	y)ÚLaxBoundedSemaphorez^Semaphore that checks that # release is <= # acquires,
    but ignores if # releases >= value.c                 óN   — | xj                   dz  c_         | j                  «        y ©Nr   )Ú_initial_valueÚacquire©Úselfs    r2   ÚshrinkzLaxBoundedSemaphore.shrink—   s   € Ø×Ò˜qÑ ÕØ�‰�r:   Nc                 ó>   — t         j                  | |«       || _        y r-   ©Ú
_SemaphoreÚ__init__rO   ©rR   ÚvalueÚverboses      r2   rW   zLaxBoundedSemaphore.__init__�   s   € Ü×Ñ  eÔ,Ø"'ˆDÕr:   c                 óÎ   — | j                   5  | xj                  dz  c_        | xj                  dz  c_        | j                   j                  «        d d d «       y # 1 sw Y   y xY wrN   )Ú_condrO   Ú_valueÚnotifyrQ   s    r2   ÚgrowzLaxBoundedSemaphore.grow¡   sM   € Ø—‘ñ $Ø×#Ò# qÑ(Õ#Ø—’˜qÑ •Ø—
‘
×!Ñ!Ô#÷$÷ $ñ $ús   �AAÁA$c                 óÆ   — | j                   }|5  | j                  | j                  k  r%| xj                  dz  c_        |j                  «        d d d «       y # 1 sw Y   y xY wrN   )r\   r]   rO   Ú
notify_all©rR   Úconds     r2   ÚreleasezLaxBoundedSemaphore.release§   sM   € Ø—:‘:ˆDØñ &Ø—;‘; ×!4Ñ!4Ò4Ø—K’K 1Ñ$•KØ—O‘OÔ%÷&÷ &ñ &úó   �?AÁA c                 ó–   — | j                   | j                  k  r0t        j                  | «       | j                   | j                  k  rŒ/y y r-   )r]   rO   rV   rd   rQ   s    r2   ÚclearzLaxBoundedSemaphore.clear®   s6   € Ø—+‘+ × 3Ñ 3Ò3Ü×"Ñ" 4Ô(ð —+‘+ × 3Ñ 3Õ3r:   c                 ó@   — t         j                  | ||«       || _        y r-   rU   rX   s      r2   rW   zLaxBoundedSemaphore.__init__³   s   € Ü×Ñ  e¨WÔ5Ø"'ˆDÕr:   c                 ó¾   — | j                   }|5  | xj                  dz  c_        | xj                  dz  c_        |j                  «        d d d «       y # 1 sw Y   y xY wrN   )Ú_Semaphore__condrO   Ú_Semaphore__valuer^   rb   s     r2   r_   zLaxBoundedSemaphore.grow·   sP   € Ø×(Ñ(ˆDØñ Ø×#Ò# qÑ(Õ#Ø×&Ò&¨!Ñ+Õ&Ø—‘”÷÷ ñ ús   �;AÁAc                 óÆ   — | j                   }|5  | j                  | j                  k  r%| xj                  dz  c_        |j                  «        d d d «       y # 1 sw Y   y xY wrN   )rj   rk   rO   Ú	notifyAllrb   s     r2   rd   zLaxBoundedSemaphore.release¾   sT   € Ø×(Ñ(ˆDØñ %Ø×)Ñ)¨D×,?Ñ,?Ò?Ø×*Ò*¨aÑ/Õ*Ø—N‘NÔ$÷%÷ %ñ %úre   c                 ó–   — | j                   | j                  k  r0t        j                  | «       | j                   | j                  k  rŒ/y y r-   )rk   rO   rV   rd   rQ   s    r2   rg   zLaxBoundedSemaphore.clearÅ   s:   € Ø×(Ñ(¨4×+>Ñ+>Ò>Ü×"Ñ" 4Ô(ð ×(Ñ(¨4×+>Ñ+>Õ>r:   ©r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rS   ÚPY3rW   r_   rd   rg   © r:   r2   rL   rL   “   s9   „ ñ+òñ ó	(ò	$ò	&ó	)ó
	(ò	ò	%ó	)r:   rL   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        ‰| �  | j                  | j                  «       y r-   )ÚreprÚexcrY   ÚsuperrW   )rR   rz   rY   Ú	__class__s      €r2   rW   zMaybeEncodingError.__init__Ò   s0   ø€ Ü˜“9ˆŒÜ˜%“[ˆŒ
Ü‰Ñ˜Ÿ™ 4§:¡:Õ.r:   c                 óN   — d| j                   j                  ›dt        | «      ›d�S )Nú<z: ú>)r|   rp   ÚstrrQ   s    r2   Ú__repr__zMaybeEncodingError.__repr__×   s   � Ø!Ÿ^™^×4Ó4´c¸$µiÐ@Ð@r:   c                 ó<   — d| j                   ›d| j                  ›d�S )NzError sending result: 'z'. Reason: 'z'.)rY   rz   rQ   s    r2   Ú__str__zMaybeEncodingError.__str__Ú   s   � à�J‹J˜Ÿ›ð"ð 	"r:   )rp   rq   rr   rs   rW   r�   rƒ   Ú__classcell__©r|   s   @r2   rw   rw   Î   s   ø„ ñ'ô/ò
Aö"r:   rw   c                   ó   — e Zd ZdZy)ÚWorkersJoinedzAll workers have terminated.N)rp   rq   rr   rs   ru   r:   r2   r‡   r‡   ß   s   „ Ú&r:   r‡   c                 ó   — t        «       ‚r-   )r   )ÚsignumÚframes     r2   Úsoft_timeout_sighandlerr‹   ã   s   € Ü
Ó
!Ð!r:   c                   ór   — e Zd Z	 	 	 	 dd„Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	e
edfd	„Zd
„ Zd„ Zd„ Zefd„Zd„ Zy)ÚWorkerNc                 ó  — |�t        |«      t        k(  r|dkD  sJ ‚|| _        || _        || _        || _        || _        || _        |	| _        |||c| _	        | _
        | _        |
| _        || _        | j                  | «       y ©Nr   )ÚtypeÚintÚinitializerÚinitargsÚmaxtasksÚmax_memory_per_childÚ	_shutdownÚon_exitÚsigprotectionÚinqÚoutqÚsynqÚwrap_exceptionÚon_ready_counterÚcontribute_to_object)rR   r™   rš   r›   r’   r“   r”   Úsentinelr—   r˜   rœ   r•   r�   s                r2   rW   zWorker.__init__í   s‰   € ð Ð¤D¨£N´cÒ$9¸hÈºlÐKÐKØ&ˆÔØ ˆŒØ ˆŒØ$8ˆÔ!Ø!ˆŒØˆŒØ*ˆÔØ),¨d°DÐ&ˆŒ�$”)˜TœYØ,ˆÔØ 0ˆÔØ×!Ñ! $Õ'r:   c                 ó  — | j                   | j                  | j                  c|_         |_        |_        | j                   j                  j	                  «       |_        | j                  j                  j	                  «       |_        | j                  rw| j                  j                  j	                  «       |_        | j                  j                  j	                  «       |_	        t        | j                  j                  «      |_        nd x|_        x|_	        |_        | j                   j                  j                  |_        | j                  j                  j                  |_        t        | j                   j                  «      |_        |S r-   )r™   rš   r›   Ú_writerr/   ÚinqW_fdÚ_readerÚoutqR_fdÚsynqR_fdÚsynqW_fdr3   Úsend_syn_offsetÚ_send_syn_offsetÚsendÚ
_quick_putÚrecvÚ
_quick_getÚsend_job_offset)rR   Úobjs     r2   rž   zWorker.contribute_to_objectþ   s
  € Ø&*§h¡h°·	±	¸4¿9¹9Ð#ˆŒ�”˜3œ8Ø—h‘h×&Ñ&×-Ñ-Ó/ˆŒØ—y‘y×(Ñ(×/Ñ/Ó1ˆŒØ�9Š9ØŸ9™9×,Ñ,×3Ñ3Ó5ˆCŒLØŸ9™9×,Ñ,×3Ñ3Ó5ˆCŒLÜ"2°4·9±9×3DÑ3DÓ"EˆCÕàAEÐEˆCŒLÐE˜3œ<¨#Ô*>ØŸ™×)Ñ)×.Ñ.ˆŒØŸ™×*Ñ*×/Ñ/ˆŒÜ.¨t¯x©x×/?Ñ/?Ó@ˆÔØˆ
r:   c                 ó&  — | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  ffS r-   )r|   r™   rš   r›   r’   r“   r”   r–   r—   r˜   rœ   r•   r�   rQ   s    r2   Ú
__reduce__zWorker.__reduce__  sn   € Ø�~‰~Ø�H‰H�d—i‘i §¡¨D×,<Ñ,<Ø�M‰M˜4Ÿ=™=¨$¯.©.¸$¿,¹,Ø×Ñ × 3Ñ 3°T×5NÑ5NØ×!Ñ!ð	 
ð 
ð 	
r:   c                 ó  ‡‡— t         j                  Šd gŠdˆˆfd„	}|t         _        t        j                  «       }| j	                  «        | j                  «        | j                  |¬«       	 t        j                  | j                  |¬«      «       | j                  |‰d   d «       y # t        $ r/}t        d| |d¬«       | j                  |‰d   |«       Y d }~ŒJd }~ww xY w# | j                  |‰d   d «       w xY w)Nc                 ó   •— | ‰d<    ‰| «      S r�   ru   )ÚstatusÚ_exitÚ	_exitcodes    €€r2   ÚexitzWorker.__call__.<locals>.exit  s   ø€ Ø!ˆI�a‰LÙ˜“=Ð r:   ©ÚpidzPool process %r error: %rr   ©Úexc_infor   r-   )Úsysr¶   ÚosÚgetpidÚ_make_child_methodsÚ
after_forkÚon_loop_startÚworkloopÚ	ExceptionrA   Ú_do_exit)rR   r¶   r¸   rz   r´   rµ   s       @@r2   Ú__call__zWorker.__call__  sÔ   ù€ Ü—‘ˆØ�Fˆ	ö	!ð ŒŒä�i‰i‹kˆà× Ñ Ô"Ø�‰ÔØ×Ñ˜sÐÔ#ð	3Ü�H‰H�T—]‘] s�]Ó+Ô,ð
 �M‰M˜#˜y¨™|¨TÕ2øô	 ò 	2ÜÐ-¨t°SÀ1ÕEØ�M‰M˜#˜y¨™|¨S×1Ñ1ûð	2ûð �M‰M˜#˜y¨™|¨TÕ2ús*   Á/%B+ Â+	C#Â4%CÃC& ÃC#Ã#C& Ã&C>c                 ó‚  — |€|rt         nt        }| j                  �| j                  ||«       t        j                  dk7  rO	 | j
                  j                  t        ||ff«       t        j                  d«       t        j                  |«       y t        j                  |«       y # t        j                  |«       w xY w)NÚwin32r   )Ú
EX_FAILUREr*   r—   r»   Úplatformrš   ÚputÚDEATHÚtimeÚsleepr¼   r´   )rR   r¸   Úexitcoderz   s       r2   rÃ   zWorker._do_exit+  s†   € ØÐÙ%(•z¬eˆHà�<‰<Ð#Ø�L‰L˜˜hÔ'ä�<‰<˜7Ò"ð#Ø—	‘	—‘œu s¨H oÐ6Ô7Ü—
‘
˜1”ä—‘˜Õ"ä�H‰H�XÕøô —‘˜Õ"ús   Á8B' Â'B>c                  ó   — y r-   ru   ©rR   r¸   s     r2   rÀ   zWorker.on_loop_start;  ó   € Ør:   c                 ó   — |S r-   ru   )rR   Úresults     r2   Úprepare_resultzWorker.prepare_result>  s   € Øˆr:   c                 ó¶  ‡ ‡— |xs t        j                  «       }‰ j                  j                  }‰ j                  }‰ j
                  }‰ j                  }‰ j                  xs d}‰ j                  }	‰ j                  }
‰ j                  Šˆˆ fd„}d}	 |�|rß||k  rÚ |
«       }|rÆ|\  }}|t        k(  sJ ‚|\  }}}}} |t        || |«       ||ff«       ‰r ||«      }|sŒO	 d |	 ||i |¤Ž«      f}	  |t        ||||ff«       |dz  }|dkD  r[t'        «       }|dk  rt)        d«       |dkD  r<||kD  r7t+        t,        j/                  ||«      «       t0        ‰ j3                  |¬«       S |€ŒÒ|r||k  rŒÚ |d|«       |r$||k(  rt0        nt4        	 ‰ j3                  |¬«       S t6        ‰ j3                  |¬«       S # t        $ r dt        «       f}Y Œáw xY w# t        $ ra}t!        j"                  «       \  }}}	 t%        ||d   «      }t        t$        ||f«      } |t        ||d|f|ff«       ~n# ~w xY wY d }~�Œ7d }~ww xY w# ‰ j3                  |¬«       w xY w)	Nr   c                 óÊ   •— d}	 |dkD  r1t        d| ‰j                  j                  j                  «       d¬«        ‰«       }|r|\  }}|t        k(  ry|t
        k(  sJ ‚y|dz  }Œ`)Nr   r   é<   z(!!!WAIT FOR ACK TIMEOUT: job:%r fd:%r!!!r¹   FT)rA   r›   r£   r/   ÚNACKÚACK)ÚjidÚiÚreqÚtype_r8   Ú_wait_for_synrR   s        €€r2   Úwait_for_synz%Worker.workloop.<locals>.wait_for_synM  sr   ø€ ØˆAØØ�r’6ÜÐDØ˜tŸy™y×0Ñ0×7Ñ7Ó9ÀAõGá#“o�ÙØ"%‘K�E˜4Ø¤’}Ø$Ø ¤Cš<Ð'˜<ØØ�Q‘�ð r:   TFr   z'worker unable to determine memory usage)Ú	completedzworker exiting after %d tasks)r¼   r½   rš   rÉ   r¢   r¦   r”   r•   rÓ   Úwait_for_jobrÞ   ÚTASKrØ   rÂ   r   ÚREADYr»   rº   rw   r   rA   r!   ÚMAXMEM_USED_FMTÚformatÚ
EX_RECYCLEÚ_ensure_messages_consumedrÇ   r*   )rR   r    Únowr¸   rÉ   r¢   r¦   r”   r•   rÓ   rà   rÞ   rß   rÛ   rÜ   Úargs_ÚjobrÚ   Úfunr8   rC   ÚconfirmrÒ   rz   Ú_ÚtbÚwrappedÚeinfoÚused_kbrÝ   s   `                            @r2   rÁ   zWorker.workloopA  s�  ù€ ØÒ ”R—Y‘Y“[ˆØ�i‰i�m‰mˆØ—,‘,ˆØ—=‘=ˆØ—=‘=ˆØ#×8Ñ8Ò=¸AÐØ×,Ñ,ˆà×(Ñ(ˆØ×)Ñ)ˆõ	ð ˆ	ð/	@ØÐ"¡x°IÀÒ4HÙ"“n�ÙØ#&‘L�E˜5Ø ¤Dš=Ð(˜=Ø05Ñ-�C˜˜C  vÙœ˜s A¡s£u¨c°8Ð<Ð=Ô>Ù$Ù".¨sÓ"3˜Ù&Ø$ð:Ø"&©±s¸DÐ7KÀFÑ7KÓ(LÐ!M˜ð$ÙœU S¨!¨V°WÐ$=Ð>Ô?ð  ‘N�IØ+¨aÒ/Ü")£)˜Ø" aš<Ü!Ð"KÔLØ" Qš;¨7Ð5IÒ+IÜ#¤O×$:Ñ$:Ø 'Ð)=ó%?ô @ä#-ð ×*Ñ*°YÐ*Õ?ð] Ñ"¡x°IÀÓ4HñJ Ð1°9Ô=ÙØ%.°(Ò%:•zÄ
ÐJð ×*Ñ*°YÐ*Õ?ô ð ×*Ñ*°YÐ*Õ?øôC %ò :Ø"'¬«Ð!9šð:ûô %ò 	$Ü#&§<¡<£>™˜˜1˜bð$Ü&8¸¸fÀQ¹iÓ&H˜GÜ$1Ü 2°G¸Rð3ó %˜Eñ  ¤¨¨a°%¸°ÀÐ(IÐ JÔKá "ø¡ú¥ûð	$ûð: ×*Ñ*°YÐ*Õ?ús†   ÂAI Ã"F< Ã3G ÄAI Å*I Å-I Å5I Æ$I Æ<GÇI ÇGÇI Ç	IÇ H<Ç95H0È.H<È0H3È3H<È6I È<IÉI ÉIc                 óÜ   — | j                   syt        t        «      D ]B  }| j                   j                  |k\  rt	        d|«        yt        j                  t        «       ŒD t        d«       y)zr Returns true if all messages sent out have been received and
        consumed within a reasonable amount of time Fz*ensured messages consumed after %d retriesTz<could not ensure all messages were consumed prior to exiting)	r�   ÚrangeÚ)GUARANTEE_MESSAGE_CONSUMPTION_RETRY_LIMITrY   r    rË   rÌ   Ú,GUARANTEE_MESSAGE_CONSUMPTION_RETRY_INTERVALr!   )rR   rß   Úretrys      r2   ræ   z Worker._ensure_messages_consumedŽ  sh   € ð ×$Ò$ØäÔDÓEò 	EˆEØ×$Ñ$×*Ñ*¨iÒ7ÜÐBÀEÔJÙÜ�J‰JÔCÕDð		Eô
 	ð ô 	àr:   c                 ó.  — t        | j                  d«      r$| j                  j                  j                  «        t        | j                  d«      r$| j                  j
                  j                  «        | j                  � | j                  | j                  Ž  t        | j                  ¬«       t        �t        j                  t        t        «       	 t        j                  t        j                  t        j                  «       y # t        $ r Y y w xY w)Nr¡   r£   )Úfull)Úhasattrr™   r¡   Úcloserš   r£   r’   r“   r   r˜   ÚSIG_SOFT_TIMEOUTÚsignalr‹   ÚSIGINTÚSIG_IGNr.   rQ   s    r2   r¿   zWorker.after_forkž  s¿   € Ü�4—8‘8˜YÔ'Ø�H‰H×Ñ×"Ñ"Ô$Ü�4—9‘9˜iÔ(Ø�I‰I×Ñ×#Ñ#Ô%à×ÑÐ'ØˆD×Ñ˜dŸm™mÑ,ô 	˜4×-Ñ-Õ.ô Ð'Ü�M‰MÔ*Ô,CÔDð	Ü�M‰Mœ&Ÿ-™-¬¯©Õ8øÜò 	Ùð	ús   Ã2D Ä	DÄDc                 óä   ‡‡‡— |j                   Št        |d«      rO|j                  j                  Št        |d«      r%|j                  r|j                  Št
        fˆfd„	}|S ˆˆfd„}|S ˆfd„}|S )Nr£   Úget_payloadc                 ó"   •— d | ‰«       «      fS ©NTru   )rI   Úloadsrÿ   s     €r2   Ú_recvz'Worker._make_recv_method.<locals>._recv¼  s   ø€ Ø¡¡{£}Ó!5Ð5Ð5r:   c                 ó(   •—  ‰| «      r	d ‰«       fS y©NT©FNru   )rI   Ú_pollÚgets    €€r2   r  z'Worker._make_recv_method.<locals>._recv¿  s   ø€ Ù˜W”~Ø#¡S£U˜{Ð*Ø&r:   c                 óN   •— 	 d ‰| ¬«      fS # t         j                  $ r Y yw xY w©NT©rI   r  r   )rI   r  s    €r2   r  z'Worker._make_recv_method.<locals>._recvÄ  s.   ø€ ð'Ø¡¨WÔ!5Ð5Ð5øÜ—{‘{ò 'Ù&ð'ús   ƒ
 Ž$£$)r  rø   r£   Úpollrÿ   r   )rR   Úconnr  r  r  rÿ   s      @@@r2   Ú_make_recv_methodzWorker._make_recv_method´  si   ú€ Ø�h‰hˆä�4˜Ô#Ø—L‘L×%Ñ%ˆEÜ�t˜]Ô+°×0@Ò0@Ø"×.Ñ.�ä)5õ 6ð ˆõ'ð ˆô'ð
 ˆr:   c                 ó¬   — | j                  | j                  «      | _        | j                  r!| j                  | j                  «      | _        y d | _        y r-   )Ú_make_protected_receiver™   rà   r›   rÞ   )rR   r  s     r2   r¾   zWorker._make_child_methodsË  sD   € Ø ×8Ñ8¸¿¹ÓBˆÔà $§	¢	ð "×9Ñ9¸$¿)¹)ÓDˆÕØ/3ð 	Õr:   c                 óŒ   ‡‡— | j                  |«      Š| j                  r| j                  j                  nd Št        fˆˆfd„	}|S )Nc                 ó`  •— ‰r ‰«       r | d«       t        t        «      ‚	  ‰d«      \  }}|sy 	 |€ | d«       t        t        «      ‚|S # t        t        f$ rQ}t	        |«      t
        j                  k(  rY d }~y  | dt        |«      j                  «       t        t        «      ‚d }~ww xY w)Nzworker got sentinel -- exitingç      ð?zworker got %s -- exiting)
Ú
SystemExitr*   ÚEOFErrorÚIOErrorr   ÚerrnoÚEINTRr�   rp   rÇ   )r    ÚreadyrÛ   rz   Ú_receiveÚshould_shutdowns       €€r2   Úreceivez/Worker._make_protected_receive.<locals>.receiveÔ  s¦   ø€ Ù¡?Ô#4ÙÐ6Ô7Ü ¤Ó'Ð'ð-Ù% c›]‘
��sÙØð ð ˆ{ÙÐ6Ô7Ü ¤Ó,Ð,ØˆJøô œgÐ&ò -Ü˜S“>¤U§[¡[Ò0ÜÙÐ0´$°s³)×2DÑ2DÔEÜ ¤Ó,Ð,ûð	-ús   £A ÁB-ÁB(Á=+B(Â(B-)r  r–   Úis_setr    )rR   r  r  r  r  s      @@r2   r  zWorker._make_protected_receiveÐ  s9   ù€ Ø×)Ñ)¨$Ó/ˆØ37·>²>˜$Ÿ.™.×/Ò/Àtˆäö 	ð$ ˆr:   )
NNru   NNNTTNNr-   )rp   rq   rr   rW   rž   r°   rÄ   rÃ   rÀ   rÓ   r    r   rÁ   ræ   r¿   r  r   r¾   r  ru   r:   r2   r�   r�   ë   s`   „ àHJØ7;Ø48Ø=Aó(ò"ò
ò3ó,ò òð #¨	°tó K@òZò ò,ð. )5ó 5ó
r:   r�   c                   óD   ‡ — e Zd Zd„ Zd„ Zˆ fd„Zd„ Zdd„Zd„ Zd„ Z	ˆ xZ
S )	Ú
PoolThreadc                 ó`   — t        j                  | «       t        | _        d| _        d| _        y ©NFT)r   rW   ÚRUNÚ_stateÚ_was_startedÚdaemon)rR   r8   rC   s      r2   rW   zPoolThread.__init__ð  s&   € Ü×Ñ˜dÔ#ÜˆŒØ!ˆÔØˆ�r:   c                 ó�  — 	 | j                  «       S # t        $ rb}t        dt        | «      j                  |d¬«       t        t        j                  «       t        «       t        j                  «        Y d }~y d }~wt        $ rA}t        dt        | «      j                  |d¬«       t        j                  d«       Y d }~y d }~ww xY w)NzThread %r crashed: %rr   r¹   )Úbodyr   rA   r�   rp   Ú_killr¼   r½   r	   r»   r¶   rÂ   r´   ©rR   rz   s     r2   ÚrunzPoolThread.runö  sŒ   € ð
	Ø—9‘9“;ÐøÜ"ò 	ÜÐ)¬4°«:×+>Ñ+>ÀØõä”"—)‘)“+œ{Ô+Ü�H‰H�J‰JûÜò 	ÜÐ)¬4°«:×+>Ñ+>ÀØõä�H‰H�Q�K‰Kûð	ús!   ‚ ’	C›AA8Á8CÂ7C Ã Cc                 ó:   •— d| _         t        t        | �  |i |¤Ž y r  )r$  r{   r  Ústart)rR   r8   rC   r|   s      €r2   r,  zPoolThread.start  s   ø€ Ø ˆÔÜŒj˜$Ñ% tÐ6¨vÓ6r:   c                  ó   — y r-   ru   rQ   s    r2   Úon_stop_not_startedzPoolThread.on_stop_not_started  rÐ   r:   c                 ó`   — | j                   r| j                  |«       y | j                  «        y r-   )r$  Újoinr.  ©rR   rI   s     r2   rG   zPoolThread.stop
  s&   € Ø×ÒØ�I‰I�gÔØØ× Ñ Õ"r:   c                 ó   — t         | _        y r-   )Ú	TERMINATEr#  rQ   s    r2   Ú	terminatezPoolThread.terminate  s	   € Üˆ�r:   c                 ó   — t         | _        y r-   )ÚCLOSEr#  rQ   s    r2   rù   zPoolThread.close  s	   € Üˆ�r:   r-   )rp   rq   rr   rW   r*  r,  r.  rG   r4  rù   r„   r…   s   @r2   r  r  î  s&   ø„ òòô7òó#ò ör:   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú
Supervisorc                 ó0   •— || _         t        ‰| �	  «        y r-   )Úpoolr{   rW   )rR   r:  r|   s     €r2   rW   zSupervisor.__init__  s   ø€ ØˆŒ	Ü‰ÑÕr:   c                 óÐ  — t        d«       t        j                  d«       | j                  }	 |j                  }t	        d|j
                  z  d«      |_        t        d«      D ]O  }| j                  t        k(  sŒ|j                  t        k(  sŒ+|j                  «        t        j                  d«       ŒQ ||_        | j                  t        k(  r_|j                  t        k(  rL|j                  «        t        j                  d«       | j                  t        k(  r|j                  t        k(  rŒLt        d«       y # t        $ r" |j                  «        |j                  «        ‚ w xY w)Nzworker handler startinggš™™™™™é?é
   r   r+   zworker handler exiting)r    rË   rÌ   r:  r   Ú
_processesrò   r#  r"  Ú_maintain_poolr   rù   r0  )rR   r:  Ú
prev_staterì   s       r2   r'  zSupervisor.body  s  € ÜÐ'Ô(ä�
‰
�3Œà�y‰yˆð	ð ×+Ñ+ˆJÜ!.¨r°D·O±OÑ/CÀQÓ!GˆDÔÜ˜2“Yò $�Ø—;‘;¤#Ó%¨$¯+©+¼Ó*<Ø×'Ñ'Ô)Ü—J‘J˜s•Oð$ð ",ˆDÔØ—+‘+¤Ò$¨¯©¼Ò);Ø×#Ñ#Ô%Ü—
‘
˜3”ð —+‘+¤Ò$¨¯©¼Ó);ô 	Ð&Õ'øô	 #ò 	Ø�J‰JŒLØ�I‰IŒKØð	ús   ®AD: Á:D: ÂBD: Ä:+E%)rp   rq   rr   rW   r'  r„   r…   s   @r2   r8  r8    s   ø„ ôö(r:   r8  c                   ó0   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zˆ xZS )ÚTaskHandlerc                 óh   •— || _         || _        || _        || _        || _        t
        ‰| �  «        y r-   )Ú	taskqueuerÉ   Úoutqueuer:  Úcacher{   rW   )rR   rC  rÉ   rD  r:  rE  r|   s         €r2   rW   zTaskHandler.__init__>  s1   ø€ Ø"ˆŒØˆŒØ ˆŒØˆŒ	ØˆŒ
Ü‰ÑÕr:   c           	      óè  — | j                   }| j                  }| j                  }t        |j                  d «      D ]Y  \  }}d }d}	 t        |«      D ]'  \  }}| j                  rt        d«        n$	  ||«       Œ) |rt        d«        ||dz   «       ŒY n t        d	«       | j                  «        y # t        $ r t        d«       Y  Œ6t        $ r; |d d \  }}		 ||   j                  |	dt        «       f«       n# t        $ r Y nw xY wY Œ»w xY w# t        $ rX |r|d d nd\  }}	||v r"||   j                  |	dz   dt        «       f«       |r t        j                  d«        ||dz   «       Y �Œ5w xY w)
Néÿÿÿÿz'task handler found thread._state != RUNzcould not put task on queuer&   Fzdoing set_length()r   )r   r   ztask handler got sentinel)rE  rC  rÉ   Úiterr  Ú	enumerater#  r    r  rÂ   Ú_setr   ÚKeyErrorr   Útell_others)
rR   rE  rC  rÉ   ÚtaskseqÚ
set_lengthÚtaskrÚ   ré   Úinds
             r2   r'  zTaskHandler.bodyF  s‚  € Ø—
‘
ˆØ—N‘Nˆ	Ø�h‰hˆä#'¨	¯©°tÓ#<ò !	/ÑˆG�ZØˆDØˆAð&Ü(¨Ó1ò ‘G�A�tØ—{’{ÜÐGÔHÙð
!Ù˜D�	ðñ  "ÜÐ2Ô3Ù" 1 q¡5Ô)ØÙð1!	/ôB Ð-Ô.à×ÑÕøô3 #ò ÜÐ;Ô<ÚÜ$ò !Ø#'¨¨ 8™˜˜Sð!Ø! #™JŸO™O¨C°%¼»Ð1IÕJøÜ'ò !Ù ð!üð	!ûô ò &Ù'+˜4  ™8°‘��SØ˜%‘<Ø˜#‘J—O‘O C¨!¡G¨e´]³_Ð-EÔFÙÜ—J‘JÐ3Ô4Ù˜q 1™uÔ%úð&úsg   Á*DÁ1B3Á9DÂ3DÃDÃ
DÃC;Ã:DÃ;	D	ÄDÄD	ÄDÄ
DÄDÄDÄAE1Å0E1c                 ó  — | j                   }| j                  }| j                  }	 t        d«       |j                  d «       t        d«       |D ]
  } |d «       Œ 	 t        d«       y # t        $ r t        d«       Y Œ"w xY w)Nz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got IOError when sending sentinelsztask handler exiting)rD  rÉ   r:  r    r  )rR   rD  rÉ   r:  Úps        r2   rL  zTaskHandler.tell_othersp  s€   € Ø—=‘=ˆØ�h‰hˆØ�y‰yˆð
	EäÐCÔDØ�L‰L˜Ôô Ð<Ô=Øò �Ù�D•	ñô
 	Ð$Õ%øô ò 	EÜÐCÖDð	Eús   ¦6A) Á)B Á?B c                 ó$   — | j                  «        y r-   )rL  rQ   s    r2   r.  zTaskHandler.on_stop_not_startedƒ  s   € Ø×ÑÕr:   )rp   rq   rr   rW   r'  rL  r.  r„   r…   s   @r2   rA  rA  <  s   ø„ ôò(òT&ö&r:   rA  c                   óH   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	ÚTimeoutHandlerc                 óh   •— || _         || _        || _        || _        d | _        t
        ‰| �  «        y r-   )Ú	processesrE  Út_softÚt_hardÚ_itr{   rW   )rR   rW  rE  rX  rY  r|   s        €r2   rW   zTimeoutHandler.__init__‰  s1   ø€ Ø"ˆŒØˆŒ
ØˆŒØˆŒØˆŒÜ‰ÑÕr:   c                 óT   ‡— t        ˆfd„t        | j                  «      D «       d«      S )Nc              3   óJ   •K  — | ]  \  }}|j                   ‰k(  r||f–— Œ y ­wr-   r·   ©Ú.0rÚ   Úprocr¸   s      €r2   ú	<genexpr>z1TimeoutHandler._process_by_pid.<locals>.<genexpr>’  ó,   øè ø€ ò 
Ù!˜!˜TØ�x‰x˜3Šð �1ŒIñ
ùó   ƒ #©NN)ÚnextrI  rW  rÏ   s    `r2   Ú_process_by_pidzTimeoutHandler._process_by_pid‘  s+   ø€ Üó 
Ü%.¨t¯~©~Ó%>ô
ð óð 	r:   c                 ó  — t        d|«       | j                  |j                  «      \  }}|sy |j                  d¬«       	 t	        |j                  t
        «       y # t        $ r'}t        |«      t        j                  k7  r‚ Y d }~y d }~ww xY w)Nzsoft time limit exceeded for %rT©Úsoft)
r    re  Ú_worker_pidÚhandle_timeoutr(  rú   ÚOSErrorr   r  ÚESRCH)rR   ré   ÚprocessÚ_indexrz   s        r2   Úon_soft_timeoutzTimeoutHandler.on_soft_timeout—  sz   € ÜÐ/°Ô5Ø×.Ñ.¨s¯©Ó?‰ˆ�ÙØð 	×Ñ ÐÔ%ð	Ü�#—/‘/Ô#3Õ4øÜò 	Ü˜‹~¤§¡Ò,Øô -ûð	ús   ÁA Á	BÁ%BÂBc                 ó\  — |j                  «       ry t        d|«       	 t        |j                  «      ‚# t        $ r) |j	                  |j
                  dt        «       f«       Y nw xY w| j                  |j                  «      \  }}|j                  d¬«       |r| j                  |«       y y )Nzhard time limit exceeded for %rFrg  )r  r    r   Ú_timeoutrJ  Ú_jobr   re  ri  rj  Ú_trywaitkill)rR   ré   rm  rn  s       r2   Úon_hard_timeoutzTimeoutHandler.on_hard_timeout¦  s˜   € Ø�9‰9Œ;ØÜÐ/°Ô5ð	Ü# C§L¡LÓ1Ð1øÜ ò 	9Ø�H‰H�S—X‘X ¤}£Ð7Ö8ð	9úð ×.Ñ.¨s¯©Ó?‰ˆ�ð 	×Ñ ÐÔ&áØ×Ñ˜gÕ&ð s   Ÿ4 ´/A&Á%A&c                 ó:  — t        d|j                  «       	 t        j                  |j                  «      |j                  k(  rXt        d|j                  «       t        j
                  t        j                  |j                  «      t        j                  «       n|j                  «        |j                  j                  d¬«      ry t        d|j                  «       	 t        j                  |j                  «      |j                  k(  rXt        d|j                  «       t        j
                  t        j                  |j                  «      t        j                  «       y t        |j                  t        «       y # t        $ r Y ŒÁw xY w# t        $ r Y y w xY w)Nztimeout: sending TERM to %szIworker %s is a group leader. It is safe to kill (SIGTERM) the whole groupr+   r  z/timeout: TERM timed-out, now sending KILL to %szIworker %s is a group leader. It is safe to kill (SIGKILL) the whole group)r    Ú_namer¼   Úgetpgidr¸   Úkillpgrû   ÚSIGTERMr4  Ú_popenÚwaitrk  ÚSIGKILLr(  ©rR   Úworkers     r2   rs  zTimeoutHandler._trywaitkill»  s  € ÜÐ+¨V¯\©\Ô:ð
	Ü�z‰z˜&Ÿ*™*Ó%¨¯©Ò3ÜÐaÐci×cmÑcmÔnÜ—	‘	œ"Ÿ*™* V§Z¡ZÓ0´&·.±.ÕAà× Ñ Ô"ð �}‰}×!Ñ!¨#Ð!Ô.ØÜÐ?ÀÇÁÔNð	Ü�z‰z˜&Ÿ*™*Ó%¨¯©Ò3ÜÐaÐci×cmÑcmÔnÜ—	‘	œ"Ÿ*™* V§Z¡ZÓ0´&·.±.ÕAä�f—j‘j¤'Õ*øô ò 	Ùð	ûô ò 	Ùð	ús+   ˜BE? Ã BF Å$F Å?	FÆ
FÆ	FÆFc              #   óF  ‡K  — | j                   | j                  }}t        «       }| j                  }| j                  }d„ }| j
                  t        k(  rÌt        j                  | j                  «      Š|rt        ˆfd„|D «       «      }‰j                  «       D ]k  \  }}|j                  }	|j                  }
|
€|}
|j                  }|€|} ||	|«      r	 ||«       ŒD||vsŒI ||	|
«      sŒS ||«       |j                  |«       Œm d –— | j
                  t        k(  rŒËy y ­w)Nc                 ó0   — | r|syt        «       | |z   k\  ryy r!  r   )r,  rI   s     r2   Ú
_timed_outz2TimeoutHandler.handle_timeouts.<locals>._timed_outØ  s    € Ù¡ØÜ‹{˜e g™oÒ-Øð .r:   c              3   ó,   •K  — | ]  }|‰v sŒ|–— Œ y ­wr-   ru   )r^  ÚkrE  s     €r2   r`  z1TimeoutHandler.handle_timeouts.<locals>.<genexpr>ç  s   øè ø€ Ò; !°°U²
œAÑ;ùó   ƒ	�)rY  rX  Úsetro  rt  r#  r"  ÚcopyrE  ÚitemsÚ_time_acceptedÚ_soft_timeoutrq  Úadd)rR   rY  rX  Údirtyro  rt  r�  rÚ   ré   Úack_timeÚsoft_timeoutÚhard_timeoutrE  s               @r2   Úhandle_timeoutszTimeoutHandler.handle_timeoutsÒ  s  øè ø€ ØŸ™ d§k¡k�ˆÜ“ˆØ×.Ñ.ˆØ×.Ñ.ˆò	ð �k‰kœSÒ ô —I‘I˜dŸj™jÓ)ˆEñ ÜÓ; uÔ;Ó;�àŸ+™+›-ò !‘��3Ø×-Ñ-�Ø"×0Ñ0�ØÐ'Ø#)�LØ"Ÿ|™|�ØÐ'Ø#)�LÙ˜h¨Ô5Ù# CÕ(Ø˜e’^©
°8¸\Õ(JÙ# CÔ(Ø—I‘I˜a•Lð!ó ð/ �k‰kœSÕ ùs   ƒCD!Ã"	D!Ã,2D!ÄD!c                 óÞ   — | j                   t        k(  r@	 | j                  «       D ]  }t        j                  d«       Œ 	 | j                   t        k(  rŒ@t        d«       y # t
        $ r Y Œw xY w)Nr  ztimeout handler exiting)r#  r"  r�  rË   rÌ   r   r    ©rR   rì   s     r2   r'  zTimeoutHandler.bodyø  sc   € Ø�k‰kœSÒ ðØ×-Ñ-Ó/ò $�AÜ—J‘J˜s•Oñ$ð �k‰kœSÓ ô 	Ð'Õ(øô ò Ùðús   •*A  Á 	A,Á+A,c                 óž   — | j                   €| j                  «       | _         	 t        | j                   «       y # t        $ r
 d | _         Y y w xY wr-   )rZ  r�  rd  ÚStopIteration©rR   r8   s     r2   Úhandle_eventzTimeoutHandler.handle_event  sB   € Ø�8‰8ÐØ×+Ñ+Ó-ˆDŒHð	Ü�—‘�NøÜò 	ØˆDŽHð	ús   £9 ¹AÁA)rp   rq   rr   rW   re  ro  rt  rs  r�  r'  r•  r„   r…   s   @r2   rU  rU  ‡  s,   ø„ ôòòò'ò*ò.$òL)ör:   rU  c                   óL   ‡ — e Zd Z	 dˆ fd„	Zd„ Zd„ Zd	d„Zd
d„Zd„ Zdd„Z	ˆ xZ
S )ÚResultHandlerc                 óê   •— || _         || _        || _        || _        || _        || _        || _        d | _        d| _        || _	        |	| _
        |
| _        | j                  «        t        ‰| �9  «        y )NF)rD  r  rE  r  Újoin_exited_workersÚputlockr   rZ  Ú_shutdown_completeÚcheck_timeoutsÚon_job_readyÚon_ready_countersÚ_make_methodsr{   rW   )rR   rD  r  rE  r  r™  rš  r   rœ  r�  rž  r|   s              €r2   rW   zResultHandler.__init__  sv   ø€ ð !ˆŒØˆŒØˆŒ
ØˆŒ	Ø#6ˆÔ ØˆŒØ*ˆÔØˆŒØ"'ˆÔØ,ˆÔØ(ˆÔØ!2ˆÔØ×ÑÔÜ‰ÑÕr:   c                 ó(   — | j                  d¬«       y )NT)r�  )Úfinish_at_shutdownrQ   s    r2   r.  z!ResultHandler.on_stop_not_started  s   € à×Ñ°ÐÕ5r:   c                 óà   ‡ ‡‡‡‡‡	— ‰ j                   Š‰ j                  Š‰ j                  Š‰ j                  Šˆˆfd„}ˆˆˆˆ fd„}d„ }t        |t
        |t        |ixŠ	‰ _        ˆ	fd„}|‰ _        y )Nc                 ón   •— d‰_         	 ‰|    j                  ||||«       y # t        t        f$ r Y y w xY wr�   )ÚRÚ_ackrK  r.   )ré   rÚ   Útime_acceptedr¸   r¦   rE  r   s        €€r2   Úon_ackz+ResultHandler._make_methods.<locals>.on_ack(  s<   ø€ ØˆMŒOðØ�c‘
—‘  =°#°xÕ@øÜœnÐ-ò áðús   Š" ¢4³4c                 óâ  •— ‰� ‰| |||«       	 ‰|    }‰
j                  rpt        t        |j	                  «       «      d «      }|rK|‰
j                  v r=‰
j                  |   }|j                  «       5  |xj                  dz  c_        d d d «       |j                  «       s‰	�‰	j                  «        	 |j                  ||«       y # t         $ r Y y w xY w# 1 sw Y   ŒNxY w# t         $ r Y y w xY wrN   )
rK  rž  rd  rH  Úworker_pidsÚget_lockrY   r  rd   rJ  )ré   rÚ   r®   r¢   ÚitemÚ
worker_pidr�   rE  r�  rš  rR   s          €€€€r2   Úon_readyz-ResultHandler._make_methods.<locals>.on_ready0  sò   ø€ ØÐ'Ù˜S ! S¨'Ô2ðØ˜S‘z�ð ×%Ò%Ü!¤$ t×'7Ñ'7Ó'9Ó":¸DÓA�
Ù *°×0FÑ0FÑ"FØ'+×'=Ñ'=¸jÑ'IÐ$Ø)×2Ñ2Ó4ñ 4Ø(×.Ò.°!Ñ3Õ.÷4ð —:‘:”<ØÐ&Ø—O‘OÔ%ðØ—	‘	˜!˜SÕ!øô ò Ùðú÷4ð 4ûô ò Ùðús/   �C Á3CÂ4C" Ã	CÃCÃCÃ"	C.Ã-C.c                 ó    — 	 t        j                  | t        «       y # t        $ r'}t	        |«      t
        j                  k7  r‚ Y d }~y d }~ww xY wr-   )r¼   r%   r	   rk  r   r  rl  )r¸   rÍ   rz   s      r2   Úon_deathz-ResultHandler._make_methods.<locals>.on_deathG  s=   € ðÜ—‘˜œ[Õ)øÜò Ü˜S“>¤U§[¡[Ò0Øô 1ûðús   ‚ �	A¦AÁAc                 óZ   •— | \  }}	  ‰|   |Ž  y # t         $ r t        d||«       Y y w xY w)NzUnknown job state: %s (args=%s))rK  r    )rO  Ústater8   Ústate_handlerss      €r2   Úon_state_changez4ResultHandler._make_methods.<locals>.on_state_changeR  s?   ø€ Ø‰KˆE�4ðFØ%�˜uÑ% tÒ,øÜò FÜÐ7¸ÀÖEðFús   ˆ ‘*©*)	rE  rš  r   r�  rØ   râ   rÊ   r²  r³  )
rR   r§  r­  r¯  r³  rE  r�  rš  r   r²  s
   `    @@@@@r2   rŸ  zResultHandler._make_methods"  sj   ý€ Ø—
‘
ˆØ—,‘,ˆØ×*Ñ*ˆØ×(Ñ(ˆõ	÷	ò.	ô �œ ¬%°ð0
ð 	
ˆ˜Ô,ô	Fð  /ˆÕr:   c              #   ót  K  — | j                   }| j                  }	 	  ||«      \  }}| j                  r*| j                  t        k(  sJ ‚t	        d«       t        «       ‚|r%|€t	        d«       t        «       ‚ ||«       |dk7  ry y d –— Œo# t        t        f$ r}t	        d|«       t        «       ‚d }~ww xY w­w)Nú result handler got %r -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelr   )r  r³  r  r  r    r   r#  r3  )rR   rI   r  r³  r  rO  rz   s          r2   Ú_process_resultzResultHandler._process_resultZ  sº   è ø€ Ø�y‰yˆØ×.Ñ.ˆàð!Ù" 7›m‘��tð
 �{Š{Ø—{‘{¤iÒ/Ð/Ð/ÜÐDÔEÜ“jÐ áØ�<ÜÐ7Ô8Ü"›*Ð$Ù Ô%Ø˜a’<ØàÛð+ øô œXÐ&ò !ÜÐ8¸#Ô>Ü“jÐ ûð!üs(   ‚B8�B ¨A#B8ÂB5ÂB0Â0B5Â5B8c                 óÔ   — | j                   t        k(  r9| j                  €| j                  d«      | _        	 t	        | j                  «       y y # t
        t        f$ r
 d | _        Y y w xY wr�   )r#  r"  rZ  r¶  rd  r“  r   )rR   r/   Úeventss      r2   r•  zResultHandler.handle_eventu  s\   € Ø�;‰;œ#ÒØ�x‰xÐØ×/Ñ/°Ó2�”ð Ü�T—X‘X•ð	 øô
 "¤8Ð,ò  Ø�–ð ús   ·A ÁA'Á&A'c                 ó  — t        d«       	 | j                  t        k(  r,	 | j                  d«      D ]  }Œ 	 | j                  t        k(  rŒ,| j                  «        y # t        $ r Y Œw xY w# | j                  «        w xY w)Nzresult handler startingr  )r    r#  r"  r¶  r   r¡  r‘  s     r2   r'  zResultHandler.body~  s}   € ÜÐ'Ô(ð	&Ø—+‘+¤Ò$ðØ!×1Ñ1°#Ó6ò ˜Øñð —+‘+¤Ó$ð ×#Ñ#Õ%øô  ò Ùðûð ×#Ñ#Õ%ús-   �A, ¡A ·A, Á	A)Á&A, Á(A)Á)A, Á,A>c           
      ó‚  — d| _         | j                  }| j                  }| j                  }| j                  }| j
                  }| j                  }| j                  }d }	|r`| j                  t        k7  rM|� |«        	  |d«      \  }
}|
r|€t        d«       Œ: ||«       	  |d¬«       |r| j                  t        k7  rŒMt#        |d
«      r?t        d«       	 t%        d«      D ]%  }|j&                  j	                  «       s n	 |«        Œ' t        dt)        |«      | j                  «       y # t        t        f$ r}t        d|«       Y d }~y d }~ww xY w# t        $ rL t        «       }|	s|}	n:||	z
  dkD  rt        d«       Y ŒÁt        dt        t!        ||	z
  dz
  d	«      «      «       Y Œþw xY w# t        t        f$ r Y Œ²w xY w)NTr  rµ  z&result handler ignoring extra sentinel)Úshutdowng      @z!result handler exiting: timed outz6result handler: all workers terminated, timeout in %ssr   r£   z"ensuring that outqueue is not fullr<  z7result handler exiting: len(cache)=%s, thread._state=%s)r›  r  rD  rE  r  r™  rœ  r³  r#  r3  r  r  r    r‡   r   ÚabsÚminrø   rò   r£   Úlen)rR   r�  r  rD  rE  r  r™  rœ  r³  Útime_terminater  rO  rz   rç   rÚ   s                  r2   r¡  z ResultHandler.finish_at_shutdownŠ  s¾  € Ø"&ˆÔØ�h‰hˆØ—=‘=ˆØ—
‘
ˆØ�y‰yˆØ"×6Ñ6ÐØ×,Ñ,ˆØ×.Ñ.ˆàˆÙ˜Ÿ™¤yÒ0ØÐ)ÙÔ ðÙ" 3›i‘��tñ
 Ø�<ÜÐBÔCØá Ô%ðCÙ#¨TÕ2ñ! ˜Ÿ™¤yÓ0ô: �8˜YÔ'ÜÐ6Ô7ðÜ˜r›ò �AØ#×+Ñ+×0Ñ0Ô2ÙÙ•Eðô 	ÐGÜ�%‹j˜$Ÿ+™+õ	'øôK œXÐ&ò ÜÐ8¸#Ô>Üûðûô !ò 
CÜ“k�Ù%Ø%(‘Nà˜^Ñ+¨cÒ1ÜÐAÔBÙÜð +äœc #¨Ñ"6¸Ñ"<¸aÓ@ÓAôCùð
Cûô, œXÐ&ò ÙðúsB   Á=D, Â!	E Ã3F, Ä,EÄ;EÅEÅ+F)Æ%F)Æ(F)Æ,F>Æ=F>r-   )r  rc  ©F)rp   rq   rr   rW   r.  rŸ  r¶  r•  r'  r¡  r„   r…   s   @r2   r—  r—  
  s.   ø„ ð BFõò$6ò6/ópó6 ò
&÷6'r:   r—  c                   ó"  — e Zd ZdZdZeZeZeZeZe	Z	e
Z
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d=d„Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd>d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d?d„Z"d?d„Z#d„ Z$d„ Z%d „ Z&d!„ Z'd"„ Z(d#„ Z)d$„ Z*d%„ Z+d&„ Z,di fd'„Z-d@d(„Z.	 	 dAd)„Z/d@d*„Z0dBd+„Z1	 	 dBd,„Z2di ddddddddddfd-„Z3d.„ Z4d@d/„Z5	 	 dAd0„Z6	 	 dAd1„Z7e8d2„ «       Z9d3„ Z:d4„ Z;d5„ Z<e8d6„ «       Z=d7„ Z>d8„ Z?e8d9„ «       Z@eAd:„ «       ZBeAd;„ «       ZCeDd<„ «       ZEy)CÚPoolzS
    Class which supports an async version of applying functions to arguments.
    TNru   c                 óp  — |xs
 t        «       | _        || _        | j                  «        t	        «       | _        i | _        t        | _        || _	        || _
        || _        || _        || _        || _        || _        |xs t         | _        |
| _        || _        || _        || _        || _        i | _        || _        t3        |xs | j                  d uxs | j                  d u«      | _        |r&t6        € t9        j:                  t=        d«      «       d }|€| j?                  «       n|| _         |xs tC        | j@                  dz  «      | _"        tG        ||	xs d«      | _#        |�tI        |«      stK        d«      ‚|�tI        |«      stK        d«      ‚| j                  jL                  | _'        g | _(        i | _)        i | _*        || _+        |xs tY        | j@                  «      | _-        t]        | j@                  «      D ]  }| j_                  |«       Œ | ja                  | «      | _1        |r| jb                  je                  «        | jg                  | j
                  | jh                  | jj                  | jP                  | j                  «      | _6        |r| jl                  je                  «        d | _7        | j4                  r…| jq                  | jP                  | j                  | j                  | j                  «      | _9        tu        «       | _;        d| _<        | j{                  «        |s1| jr                  j|                  | _7        nd | _9        d| _<        d | _;        | j                  «       | _@        | j€                  j|                  | _A        |r| j€                  je                  «        t…        | | j†                  | j
                  | jˆ                  | jj                  | jP                  | jb                  | jl                  | j€                  | j                  | jr                  | j‹                  «       f
d¬«      | _F        y )	NúWSoft timeouts are not supported: on this platform: It does not have the SIGUSR1 signal.éd   r   zinitializer must be a callablez on_process_exit must be callableFé   )r8   Úexitpriority)Gr   Ú_ctxÚsynackÚ_setup_queuesr   Ú
_taskqueueÚ_cacher"  r#  rI   r�  Ú_maxtasksperchildÚ_max_memory_per_childÚ_initializerÚ	_initargsÚ_on_process_exitÚLOST_WORKER_TIMEOUTÚlost_worker_timeoutÚon_process_upÚon_process_downÚon_timeout_setÚon_timeout_cancelÚthreadsÚreadersÚallow_restartÚboolÚenable_timeoutsrú   ÚwarningsÚwarnÚUserWarningr   r=  ÚroundÚmax_restartsr   ÚcallableÚ	TypeErrorÚProcessÚ_ProcessÚ_poolÚ	_poolctrlÚ_on_ready_countersÚputlocksrL   Ú_putlockrò   Ú_create_worker_processr8  Ú_worker_handlerr,  rA  rª   Ú	_outqueueÚ_task_handlerrœ  rU  Ú_timeout_handlerÚLockÚ_timeout_handler_mutexÚ_timeout_handler_startedÚ_start_timeout_handlerr•  Úcreate_result_handlerÚ_result_handlerÚhandle_result_eventr   Ú_terminate_poolÚ_inqueueÚ_help_stuff_finish_argsÚ
_terminate)rR   rW  r’   r“   ÚmaxtasksperchildrI   r�  rÓ  rá  Úmax_restart_freqrÔ  rÕ  rÖ  r×  rØ  Ú	semaphoreré  rÚ  rÉ  Úon_process_exitÚcontextr•   rÜ  rC   rÚ   s                            r2   rW   zPool.__init__Ï  s¨  € ð$ Ò,œ{›}ˆŒ	ØˆŒØ×ÑÔÜ›'ˆŒØˆŒÜˆŒØˆŒØ(ˆÔØ!1ˆÔØ%9ˆÔ"Ø'ˆÔØ!ˆŒØ /ˆÔØ#6Ò#MÔ:MˆÔ Ø*ˆÔØ.ˆÔØ,ˆÔØ!2ˆÔØˆŒØˆŒØ*ˆÔä#Øò *Ø�L‰L Ð$ò*à×Ñ TÐ)ó 
ˆÔñ Ô,Ð4Ü�M‰Mœ+ðIóô ð  ˆLà.7Ð.?˜$Ÿ.™.Ô*ÀYˆŒØ(ÒH¬E°$·/±/ÀCÑ2GÓ,HˆÔÜ*¨<Ð9IÒ9NÈQÓOˆÔàÐ"¬8°KÔ+@ÜÐ<Ó=Ð=àÐ&¬x¸Ô/HÜÐ>Ó?Ð?àŸ	™	×)Ñ)ˆŒàˆŒ
ØˆŒØ"$ˆÔØ ˆŒØ!ÒIÔ%8¸¿¹Ó%IˆŒÜ�t—‘Ó'ò 	+ˆAØ×'Ñ'¨Õ*ð	+ð  $Ÿ™¨tÓ4ˆÔÙØ× Ñ ×&Ñ&Ô(à!×-Ñ-¨d¯o©oØ.2¯o©oØ.2¯n©nØ.2¯j©jØ.2¯k©kó	;ˆÔñ
 Ø×Ñ×$Ñ$Ô&à"ˆÔð ×ÒØ$(×$7Ñ$7Ø—
‘
˜DŸK™KØ×!Ñ! 4§<¡<ó%ˆDÔ!ô +/«&ˆDÔ'Ø,1ˆDÔ)Ø×'Ñ'Ô)ñ Ø&*×&;Ñ&;×&HÑ&H�Õ#à$(ˆDÔ!Ø,1ˆDÔ)Ø*.ˆDÔ'ð  $×9Ñ9Ó;ˆÔØ#'×#7Ñ#7×#DÑ#DˆÔ áØ× Ñ ×&Ñ&Ô(ä"Ø�$×&Ñ&Ø—/‘/ 4§=¡=°$·.±.Ø—*‘*˜d×2Ñ2°D×4FÑ4FØ×&Ñ&¨¯©Ø×'Ñ'Ø×.Ñ.Ó0ð	2ð
 ô
ˆ�r:   c                 ó&   —  | j                   |i |¤ŽS r-   )rå  )rR   r8   Úkwdss      r2   rä  zPool.ProcessI  s   € Øˆt�}‰}˜dÐ+ dÑ+Ð+r:   c                 óD   — |j                  | j                  |¬«      «      S )N)Útarget)rž   rä  r}  s     r2   ÚWorkerProcesszPool.WorkerProcessL  s   € Ø×*Ñ*¨4¯<©<¸v¨<Ó+FÓGÐGr:   c                 ó  —  | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  f	d| j                  i|¤ŽS )Nrž  )r—  rí  r¬   rÌ  Ú_poll_resultÚ_join_exited_workersrê  r   rœ  r�  rè  )rR   Úextra_kwargss     r2   rô  zPool.create_result_handlerO  su   € Ø!ˆt×!Ñ!Ø�N‰N˜DŸO™O¨T¯[©[Ø×Ñ˜t×8Ñ8Ø�M‰M˜4×-Ñ-¨t×/BÑ/BØ×Ññ	
ð 26×1HÑ1Hð	
ð
 ñ
ð 	
r:   c                  ó   — y r-   ru   )rR   ré   rÚ   r®   r¢   s        r2   r�  zPool.on_job_readyX  rÐ   r:   c                 óH   — | j                   | j                  | j                  fS r-   )rø  rî  ræ  rQ   s    r2   rù  zPool._help_stuff_finish_args[  s   € Ø�}‰}˜d×0Ñ0°$·*±*Ð<Ð<r:   c                 ó6   — 	 t        «       S # t        $ r Y yw xY wrN   )r   ÚNotImplementedErrorrQ   s    r2   r   zPool.cpu_count^  s!   € ð	Ü“;ÐøÜ"ò 	Ùð	ús   ‚	 Œ	—c                 ó4   —  | j                   j                  |Ž S r-   )rõ  r•  r”  s     r2   rö  zPool.handle_result_eventd  s   € Ø0ˆt×#Ñ#×0Ñ0°$Ð7Ð7r:   c                  ó   — y r-   ru   )rR   r~  Úqueuess      r2   Ú_process_register_queueszPool._process_register_queuesg  rÐ   r:   c                 óT   ‡— t        ˆfd„t        | j                  «      D «       d«      S )Nc              3   óJ   •K  — | ]  \  }}|j                   ‰k(  r||f–— Œ y ­wr-   r·   r]  s      €r2   r`  z'Pool._process_by_pid.<locals>.<genexpr>k  ra  rb  rc  )rd  rI  ræ  rÏ   s    `r2   re  zPool._process_by_pidj  s+   ø€ Üó 
Ü%.¨t¯z©zÓ%:ô
ð óð 	r:   c                 ó4   — | j                   | j                  d fS r-   )rø  rí  rQ   s    r2   Úget_process_queueszPool.get_process_queuesp  s   € Ø�}‰}˜dŸn™n¨dÐ2Ð2r:   c                 ó  — | j                   r| j                  j                  «       nd }| j                  «       \  }}}| j                  j	                  d«      }| j                  | j                  |||| j                  | j                  | j                  || j                  | j                  | j                  | j                  |¬«      «      }| j                  j                  |«       | j!                  ||||f«       |j"                  j%                  dd«      |_        d|_        ||_        |j+                  «        || j,                  |j.                  <   || j0                  |j.                  <   | j2                  r| j3                  |«       |S )NrÚ   )r˜   rœ   r•   r�   rä  Ú
PoolWorkerT)rÚ  rÈ  ÚEventr  ÚValuer  r�   rÏ  rÐ  rÍ  rÑ  rØ  Ú_wrap_exceptionrÎ  ræ  Úappendr  ÚnameÚreplacer%  Úindexr,  rç  r¸   rè  rÔ  )rR   rÚ   rŸ   r™   rš   r›   r�   Úws           r2   rë  zPool._create_worker_processs  sC  € Ø(,×(:Ò(:�4—9‘9—?‘?Ô$ÀˆØ×1Ñ1Ó3‰ˆˆT�4ØŸ9™9Ÿ?™?¨3Ó/ÐØ×Ñ˜tŸ{™{Ø��t˜T×.Ñ.°·±Ø×"Ñ" H¨d×.CÑ.Cð Ÿ,™,Ø×/Ñ/Ø!%×!;Ñ!;Ø-ð  +ó 	 
ó 	ˆð 	�
‰
×Ñ˜!ÔØ×%Ñ% a¨#¨t°TÐ):Ô;Ø—‘—‘ 	¨<Ó8ˆŒØˆŒØˆŒØ	�‰Œ	Ø (ˆ�‰�q—u‘uÑØ)9ˆ×Ñ §¡Ñ&Ø×ÒØ×Ñ˜qÔ!Øˆr:   c                  ó   — y r-   ru   r}  s     r2   Úprocess_flush_queueszPool.process_flush_queues�  rÐ   r:   c           	      óš  ‡‡— d}t        | j                  j                  «       «      D �cg c]   }|j                  «       s|j                  r|‘Œ" c}D ]D  }|xs
 t        «       }|j                  \  }}||z
  |j                  kD  sŒ3| j                  ||«       ŒF |rt        | j                  «      s
t        «       ‚i i cŠ}t        t        t        | j                  «      «      «      D �]  }| j                  |   }|j                  }	|j                  }
|
�|	€Œ0t        d|«       |
�|j!                  «        t        d|«       |‰|j"                  <   |	||j"                  <   |	t$        t&        fvr:t)        |dd«      s-t+        d|j,                  |j"                  t/        |	«      d¬«       | j1                  |«       | j                  |= | j2                  |j"                  = | j4                  |j"                  = �Œ ‰�rÉ| j                  D �cg c]  }|j"                  ‘Œ c}Št        | j                  j                  «       «      D �]  }t7        ˆˆfd	„|j9                  «       D «       d«      }|r~| j;                  ||«       |j                  «       rŒM|j=                  |«      xs d}	‰j=                  |«      }|rt)        |d
d«      r|j?                  |	«       Œ”| jA                  |||	«       Œ¨|jB                  }|jD                  }|r-|jG                  «       s| j;                  ||j"                  «       Œï|sŒò|jG                  «       r�Œ| j;                  ||j"                  «       �Œ" ‰j                  «       D ]3  }| jH                  sŒ|s| jK                  |«       | jI                  |«       Œ5 t        |j                  «       «      S g S c c}w c c}w )z¤Cleanup after any worker processes which have exited due to
        reaching their specified lifetime. Returns True if any workers were
        cleaned up.
        Nz!Supervisor: cleaning up worker %dzSupervisor: worked %d joinedÚ_controlled_terminationFz Process %r pid:%r exited with %rr   r¹   c              3   ó2   •K  — | ]  }|‰v s|‰vr|–— Œ y ­wr-   ru   )r^  r¸   Úall_pidsÚcleaneds     €€r2   r`  z,Pool._join_exited_workers.<locals>.<genexpr>À  s&   øè ø€ ò ?˜SØ˜w™¨#°XÑ*=ô ñ ?ùs   ƒÚ_job_terminated)&r5   rÌ  Úvaluesr  Ú_worker_lostr   Ú_lost_worker_timeoutÚmark_as_worker_lostr¾  ræ  r‡   Úreversedrò   rÍ   rz  r    r0  r¸   r*   rå   ÚgetattrrA   r  r
   r   rç  rè  rd  r©  Úon_job_process_downr  Ú_set_terminatedÚon_job_process_lostÚ	_write_toÚ_scheduled_forÚ	_is_aliverÕ  Ú_process_cleanup_queues)rR   r»  rç   ré   Ú	lost_timeÚlost_retÚ	exitcodesrÚ   r~  rÍ   Úpopenr  Úacked_by_goner_  Úwrite_toÚ	sched_forr$  r%  s                   @@r2   r  zPool._join_exited_workers�  sG  ù€ ð
 ˆô
 $(¨¯©×(:Ñ(:Ó(<Ó#=ö =˜CØŸ9™9œ;¨3×+;Ò+;ò ò =ò 	8ˆCàÒ$œ›ˆCØ"%×"2Ñ"2ÑˆI�xØ�Y‰ ×!9Ñ!9Ó9Ø×(Ñ(¨¨hÕ7ð	8ñ œC §
¡
œOÜ“/Ð!à Ðˆ�Üœ%¤ D§J¡J£Ó0Ó1ó 	8ˆAØ—Z‘Z ‘]ˆFØ—‘ˆHØ—M‘MˆEØˆ} Ñ 4äÐ9¸1Ô=ØÐ$Ø—K‘K”MÜÐ4°aÔ8Ø&,�˜Ÿ
™
Ñ#Ø(0�	˜&Ÿ*™*Ñ%Ø¤E¬:Ð#6Ñ6Ü# FÐ,EÀuÔMÜØ:ØŸ™ V§Z¡Z´¸hÓ1GØ!"õð
 ×)Ñ)¨&Ô1Ø—J‘J˜q�MØ—N‘N 6§:¡:Ð.Ø×+Ñ+¨F¯J©JÒ7ð-	8ò. Ø'+§z¡zÖ2 !˜Ÿ›Ò2ˆHÜ˜DŸK™K×.Ñ.Ó0Ó1ó E�Ü $ô? C§O¡OÓ$5ô ?àó!�ñ !Ø×,Ñ,¨S°-Ô@ØŸ9™9�;Ø#,§=¡=°Ó#?Ò#DÀ1˜Ø&Ÿ{™{¨=Ó9˜Ù¤G¨DÐ2CÀUÔ$KØ×/Ñ/°Õ9à ×4Ñ4Ø # ]°Hõð
  #Ÿ}™}�Hà #× 2Ñ 2�Iá¨×(:Ñ(:Ô(<Ø×0Ñ0°°h·l±lÕCÚ"¨9×+>Ñ+>Ö+@Ø×0Ñ0°°i·m±mÖDð7Eð: "Ÿ.™.Ó*ò 1�Ø×'Ó'Ù#Ø×4Ñ4°VÔ<Ø×(Ñ(¨Õ0ð	1ô
 ˜	×(Ñ(Ó*Ó+Ð+Øˆ	ùòO=ùòF 3s   ª%OÈOc                  ó   — y r-   ru   )rR   ré   r~  s      r2   Úon_partial_readzPool.on_partial_readã  rÐ   r:   c                  ó   — y r-   ru   r}  s     r2   r3  zPool._process_cleanup_queuesæ  rÐ   r:   c                  ó   — y r-   ru   )rR   ré   Úpid_gones      r2   r-  zPool.on_job_process_downé  rÐ   r:   c                 ó&   — t        «       |f|_        y r-   )r   r(  )rR   ré   r¸   rÍ   s       r2   r/  zPool.on_job_process_lostì  s   € Ü%›K¨Ð2ˆÕr:   c                 ó¶   — 	 t        dj                  t        |«      |j                  «      «      ‚# t         $ r |j	                  d dt        «       f«       Y y w xY w)Nz(Worker exited prematurely: {0} Job: {1}.F)r   rä   r
   rr  rJ  r   )rR   ré   rÍ   s      r2   r*  zPool.mark_as_worker_lostï  sV   € ð	Ü!Ø:×AÑAÜ  Ó*¨C¯H©Hó6óð øô ò 	5Ø�H‰H�T˜E¤=£?Ð3Ö4ð	5ús   ‚.0 °%AÁAc                 ó   — | S r-   ru   rQ   s    r2   Ú	__enter__zPool.__enter__ú  ó   € Øˆr:   c                 ó"   — | j                  «       S r-   )r4  )rR   rº   s     r2   Ú__exit__zPool.__exit__ý  s   € Ø�~‰~ÓÐr:   c                  ó   — y r-   ru   ©rR   Úns     r2   Úon_growzPool.on_grow   rÐ   r:   c                  ó   — y r-   ru   rH  s     r2   Ú	on_shrinkzPool.on_shrink  rÐ   r:   c                 ó&  — t        | j                  «       «      D ]k  \  }}| xj                  dz  c_        | j                  r| j                  j	                  «        |j                  «        | j                  d«       ||dz
  k\  sŒk y  t        d«      ‚)Nr   z&Can't shrink pool. All processes busy!)rI  Ú_iterinactiver=  rê  rS   Úterminate_controlledrL  Ú
ValueError)rR   rI  rÚ   r~  s       r2   rS   zPool.shrink  s~   € Ü" 4×#5Ñ#5Ó#7Ó8ò 		G‰IˆAˆvØ�OŠO˜qÑ �OØ�}Š}Ø—‘×$Ñ$Ô&Ø×'Ñ'Ô)Ø�N‰N˜1ÔØ�A˜‘E‹zÙð		Gô ÐEÓFÐFr:   c                 ó¾   — t        |«      D ]>  }| xj                  dz  c_        | j                  sŒ%| j                  j                  «        Œ@ | j	                  |«       y rN   )rò   r=  rê  r_   rJ  )rR   rI  rÚ   s      r2   r_   z	Pool.grow  sG   € Ü�q“ò 	%ˆAØ�OŠO˜qÑ �OØ�}‹}Ø—‘×"Ñ"Õ$ð	%ð 	�‰�Q�r:   c              #   óZ   K  — | j                   D ]  }| j                  |«      rŒ|–— Œ y ­wr-   )ræ  Ú_worker_activer}  s     r2   rN  zPool._iterinactive  s,   è ø€ Ø—j‘jò 	ˆFØ×&Ñ& vÕ.Ø“ñ	ùs   ‚!+¤+c                 ó~   — | j                   j                  «       D ]   }|j                  |j                  «       v sŒ  y y)NTF)rÌ  r'  r¸   r©  )rR   r~  ré   s      r2   rS  zPool._worker_active  s9   € Ø—;‘;×%Ñ%Ó'ò 	ˆCØ�z‰z˜SŸ_™_Ó.Ò.Ùð	ð r:   c                 ó�  — t        | j                  t        | j                  «      z
  «      D ]o  }| j                  t
        k7  r y	 |r+||   t        t        fvr| j                  j                  «        | j                  | j                  «       «       t        d«       Œq y# t        $ r | j                  j                  «        Y ŒRw xY w)z€Bring the number of pool processes up to the specified number,
        for use after reaping workers which have exited.
        Nzadded worker)rò   r=  r¾  ræ  r#  r"  r*   rå   r   ÚstepÚ
IndexErrorrë  Ú_avail_indexr    )rR   r6  rÚ   s      r2   Ú_repopulate_poolzPool._repopulate_pool$  s¦   € ô �t—‘¬¨T¯Z©Z«Ñ8Ó9ò 		"ˆAØ�{‰{œcÒ!Ùð*Ù ¨1¡´e¼ZÐ5HÑ!HØ×&Ñ&×+Ñ+Ô-ð ×'Ñ'¨×(9Ñ(9Ó(;Ô<Ü�.Õ!ñ		"øô ò *Ø×"Ñ"×'Ñ'Ö)ð*ús   Á-BÂ#CÃCc                 óÒ   ‡— t        | j                  «      | j                  k  sJ ‚t        d„ | j                  D «       «      Št	        ˆfd„t        | j                  «      D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr-   )r  )r^  rR  s     r2   r`  z$Pool._avail_index.<locals>.<genexpr>5  s   è ø€ Ò2 !�a—g•gÑ2ùs   ‚c              3   ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wr-   ru   )r^  rÚ   Úindicess     €r2   r`  z$Pool._avail_index.<locals>.<genexpr>6  s   øè ø€ ÒJ˜!¸À'Ò9I”AÑJùr„  )r¾  ræ  r=  r…  rd  rò   )rR   r]  s    @r2   rX  zPool._avail_index3  sK   ø€ Ü�4—:‘:‹ §¡Ò0Ð0Ð0ÜÑ2 t§z¡zÔ2Ó2ˆÜÓJœu T§_¡_Ó5ÔJÓJÐJr:   c                 ó$   — | j                  «        S r-   )r  rQ   s    r2   Údid_start_okzPool.did_start_ok8  s   € Ø×,Ñ,Ó.Ð.Ð.r:   c                 óÆ   — | j                  «       }| j                  |«       t        t        |«      «      D ])  }| j                  €Œ| j                  j                  «        Œ+ y)zF"Clean up any exited workers and start replacements for them.
        N)r  rY  rò   r¾  rê  rd   )rR   ÚjoinedrÚ   s      r2   r>  zPool._maintain_pool;  sR   € ð ×*Ñ*Ó,ˆØ×Ñ˜fÔ%Ü”s˜6“{Ó#ò 	(ˆAØ�}‰}Ñ(Ø—‘×%Ñ%Õ'ñ	(r:   c                 óF  — | j                   j                  t        k(  r&| j                  t        k(  r	 | j                  «        y y y # t        $ r" | j                  «        | j                  «        ‚ t        $ r)}t        |«      t        j                  k(  rt        |‚‚ d }~ww xY wr-   )rì  r#  r"  r>  r   rù   r0  rk  r   r  ÚENOMEMÚMemoryErrorr)  s     r2   Úmaintain_poolzPool.maintain_poolD  s…   € Ø×Ñ×&Ñ&¬#Ò-°$·+±+ÄÒ2Dð	Ø×#Ñ#Õ%ð 3EÐ-øô 'ò Ø—
‘
”Ø—	‘	”ØÜò Ü˜S“>¤U§\¡\Ò1Ü%¨3Ð.Øûðús   ²A Á2B Á7$BÂB c                 ó.  ‡ — ‰ j                   j                  «       ‰ _        ‰ j                   j                  «       ‰ _        ‰ j                  j                  j
                  ‰ _        ‰ j                  j                  j                  ‰ _	        ˆ fd„}|‰ _
        y )Nc                 ót   •— ‰j                   j                  j                  | «      rd‰j                  «       fS yr  )rí  r£   r  r¬   ©rI   rR   s    €r2   r  z(Pool._setup_queues.<locals>._poll_resultW  s0   ø€ Ø�~‰~×%Ñ%×*Ñ*¨7Ô3Ø˜TŸ_™_Ó.Ð.Ð.Ør:   )rÈ  ÚSimpleQueuerø  rí  r¡   r©   rª   r£   r«   r¬   r  ©rR   r  s   ` r2   rÊ  zPool._setup_queuesQ  sh   ø€ ØŸ	™	×-Ñ-Ó/ˆŒØŸ™×.Ñ.Ó0ˆŒØŸ-™-×/Ñ/×4Ñ4ˆŒØŸ.™.×0Ñ0×5Ñ5ˆŒô	ð )ˆÕr:   c                 óÔ   — | j                   rP| j                  �C| j                  5  | j                  s!d| _        | j                  j	                  «        d d d «       y y y # 1 sw Y   y xY wr  )rØ  rï  rñ  rò  r,  rQ   s    r2   ró  zPool._start_timeout_handler]  sc   € ð �<Š<˜D×1Ñ1Ð=Ø×,Ñ,ñ 2Ø×4Ò4Ø48�DÔ1Ø×)Ñ)×/Ñ/Ô1÷2ð 2ð >ˆ<÷2ð 2ús   ¥.AÁA'c                 ól   — | j                   t        k(  r!| j                  |||«      j                  «       S y)z8
        Equivalent of `func(*args, **kwargs)`.
        N)r#  r"  Úapply_asyncr  )rR   Úfuncr8   r  s       r2   Úapplyz
Pool.applyf  s3   € ð �;‰;œ#ÒØ×#Ñ# D¨$°Ó5×9Ñ9Ó;Ð;ð r:   c                 óv   — | j                   t        k(  r&| j                  ||t        |«      j	                  «       S y)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).
        N)r#  r"  Ú
_map_asyncr>   r  ©rR   rn  ÚiterableÚ	chunksizes       r2   r=   zPool.starmapm  s7   € ð �;‰;œ#ÒØ—?‘? 4¨Ü#.°	ó;ß;>¹3»5ðAð r:   c                 ó^   — | j                   t        k(  r| j                  ||t        |||«      S y)z=
        Asynchronous version of `starmap()` method.
        N)r#  r"  rq  r>   ©rR   rn  rs  rt  ÚcallbackÚerror_callbacks         r2   Ústarmap_asynczPool.starmap_asyncw  s3   € ð
 �;‰;œ#ÒØ—?‘? 4¨´;À	Ø#+¨^ó=ð =ð r:   c                 ól   — | j                   t        k(  r!| j                  |||«      j                  «       S y)zx
        Apply `func` to each element in `iterable`, collecting the results
        in a list that is returned.
        N)r#  r"  Ú	map_asyncr  rr  s       r2   r6   zPool.map€  s1   € ð
 �;‰;œ#ÒØ—>‘> $¨°)Ó<×@Ñ@ÓBÐBð r:   c                 óì  ‡‡— | j                   t        k7  ry|xs | j                  }|dk(  rSt        | j                  |¬«      Š| j
                  j                  ˆˆfd„t        |«      D «       ‰j                  f«       ‰S |dkD  sJ ‚t        j                  ‰||«      }t        | j                  |¬«      Š| j
                  j                  ˆfd„t        |«      D «       ‰j                  f«       d„ ‰D «       S )zP
        Equivalent of `map()` -- can be MUCH slower than `Pool.map()`.
        Nr   ©rÓ  c              3   óT   •K  — | ]  \  }}t         ‰j                  |‰|fi ff–— Œ! y ­wr-   ©rá   rr  ©r^  rÚ   Úxrn  rÒ   s      €€r2   r`  zPool.imap.<locals>.<genexpr>“  ó3   øè ø€ ò 2Ù�Q˜ô ˜Ÿ™ a¨°¨t°RÐ8Ô9ñ 2ùó   ƒ%(c              3   ó\   •K  — | ]#  \  }}t         ‰j                  |t        |fi ff–— Œ% y ­wr-   ©rá   rr  r9   ©r^  rÚ   r�  rÒ   s      €r2   r`  zPool.imap.<locals>.<genexpr>ž  ó3   øè ø€ ò 6Ù�Q˜ô ˜Ÿ™ a¬°1°$¸Ð;Ô<ñ 6ùó   ƒ),c              3   ó.   K  — | ]  }|D ]  }|–— Œ Œ y ­wr-   ru   ©r^  Úchunkr«  s      r2   r`  zPool.imap.<locals>.<genexpr>¢  ó   è ø€ Ò?˜U¸Ò?°”DÐ?�DÑ?ùó   ‚)r#  r"  rÓ  ÚIMapIteratorrÌ  rË  rÉ   rI  Ú_set_lengthrÂ  Ú
_get_tasks©rR   rn  rs  rt  rÓ  Útask_batchesrÒ   s    `    @r2   Úimapz	Pool.imapˆ  së   ù€ ð �;‰;œ#ÒØØ1ÒM°T×5MÑ5MÐØ˜Š>Ü! $§+¡+Ø6IôKˆFà�O‰O×Ñô2Ü& xÓ0ô2à×"Ñ"ð!ô ð
 ˆMà˜q’=Ð �=ÜŸ?™?¨4°¸9ÓEˆLÜ! $§+¡+Ø6IôKˆFà�O‰O×Ñó6Ü& |Ó4ô6à×"Ñ"ð!ô ñ
 @ fÔ?Ð?r:   c                 óì  ‡‡— | j                   t        k7  ry|xs | j                  }|dk(  rSt        | j                  |¬«      Š| j
                  j                  ˆˆfd„t        |«      D «       ‰j                  f«       ‰S |dkD  sJ ‚t        j                  ‰||«      }t        | j                  |¬«      Š| j
                  j                  ˆfd„t        |«      D «       ‰j                  f«       d„ ‰D «       S )zL
        Like `imap()` method but ordering of results is arbitrary.
        Nr   r}  c              3   óT   •K  — | ]  \  }}t         ‰j                  |‰|fi ff–— Œ! y ­wr-   r  r€  s      €€r2   r`  z&Pool.imap_unordered.<locals>.<genexpr>±  r‚  rƒ  c              3   ó\   •K  — | ]#  \  }}t         ‰j                  |t        |fi ff–— Œ% y ­wr-   r…  r†  s      €r2   r`  z&Pool.imap_unordered.<locals>.<genexpr>½  r‡  rˆ  c              3   ó.   K  — | ]  }|D ]  }|–— Œ Œ y ­wr-   ru   rŠ  s      r2   r`  z&Pool.imap_unordered.<locals>.<genexpr>Á  rŒ  r�  )r#  r"  rÓ  ÚIMapUnorderedIteratorrÌ  rË  rÉ   rI  r�  rÂ  r�  r‘  s    `    @r2   Úimap_unorderedzPool.imap_unordered¤  sï   ù€ ð
 �;‰;œ#ÒØØ1ÒM°T×5MÑ5MÐØ˜Š>Ü*Ø—‘Ð1DôˆFð �O‰O×Ñô2Ü& xÓ0ô2à×"Ñ"ð!ô ð
 ˆMà˜q’=Ð �=ÜŸ?™?¨4°¸9ÓEˆLÜ*Ø—‘Ð1DôˆFð �O‰O×Ñó6Ü& |Ó4ô6à×"Ñ"ð!ô ñ
 @ fÔ?Ð?r:   c                 ó
  — | j                   t        k7  ry|	xs | j                  }	|
xs | j                  }
|xs | j                  }|	r&t
        € t        j                  t        d«      «       d}	| j                   t        k(  �r|€| j                  n|}|r&| j                  �| j                  j                  «        t        | j                  |||||	|
|| j                  | j                  || j                   r| j"                  nd|¬«      }|
s|	r| j%                  «        | j&                  r5| j(                  j+                  t,        |j.                  d|||ffgdf«       |S | j1                  t,        |j.                  d|||ff«       |S y)a  
        Asynchronous equivalent of `apply()` method.

        Callback is called when the functions return value is ready.
        The accept callback is called when the job is accepted to be executed.

        Simplified the flow is like this:

            >>> def apply_async(func, args, kwds, callback, accept_callback):
            ...     if accept_callback:
            ...         accept_callback()
            ...     retval = func(*args, **kwds)
            ...     if callback:
            ...         callback(retval)

        NrÄ  )rÖ  r×  Úcallbacks_propagateÚsend_ackÚcorrelation_id)r#  r"  r�  rI   rÓ  rú   rÝ  rÞ  rß  ré  rê  rP   ÚApplyResultrÌ  rÖ  r×  rÉ  rœ  ró  rØ  rË  rÉ   rá   rr  rª   )rR   rn  r8   r  rw  rx  Úaccept_callbackÚtimeout_callbackÚwaitforslotr�  rI   rÓ  r›  r�  rÒ   s                  r2   rm  zPool.apply_asyncÃ  st  € ð, �;‰;œ#ÒØØ#Ò8 t×'8Ñ'8ˆØÒ)˜TŸ\™\ˆØ1ÒM°T×5MÑ5MÐÙÔ,Ð4Ü�M‰Mœ+ðIóô ð  ˆLØ�;‰;œ#ÓØ+6Ð+>˜$Ÿ-š-ÀKˆKÙ˜tŸ}™}Ð8Ø—‘×%Ñ%Ô'Ü Ø—‘˜X Ð8HØ ¨gÐ7JØ#×2Ñ2Ø"&×"8Ñ"8Ø$7Ø*.¯+ª+˜Ÿš¸4Ø-ôˆFñ ™,à×+Ñ+Ô-Ø�|Š|Ø—‘×#Ñ#¤t¨f¯k©k¸4Ø$(¨$°ð.6ð '7ð &8Ø9=ð%?ô @ð ˆMð —‘¤¨¯©°T¸4ÀÀtÐ'LÐ MÔNØˆMð+ r:   c                  ó   — y r-   ru   )rR   Úresponseré   rÚ   Úfds        r2   rœ  zPool.send_ackû  rÐ   r:   c                 óÞ   — | j                  |«      \  }}|�$	 t        ||xs t        «       d|_        d|_        y y # t
        $ r'}t        |«      t        j                  k7  r‚ Y d }~y d }~ww xY wr  )	re  r(  r	   r"  r&  rk  r   r  rl  )rR   r¸   Úsigr_  rì   rz   s         r2   Úterminate_jobzPool.terminate_jobþ  sq   € Ø×&Ñ& sÓ+‰ˆˆaØÐð,Ü�c˜3Ò-¤+Ô.ð
 04�Ô,Ø'+�Õ$ð øô ò Ü˜S“>¤U§[¡[Ò0Øô 1ûðús   ˜< ¼	A,ÁA'Á'A,c                 ó6   — | j                  ||t        |||«      S )z<
        Asynchronous equivalent of `map()` method.
        )rq  r9   rv  s         r2   r{  zPool.map_async
  s"   € ð
 �‰Ø�(œG Y°¸.ó
ð 	
r:   c                 óÂ  ‡‡	— | j                   t        k7  ryt        |d«      st        |«      }|€5t	        t        |«      t        | j                  «      dz  «      \  }}|r|dz  }t        |«      dk(  rd}t        j                  |||«      }t        | j                  |t        |«      ||¬«      Š	| j                  j                  ˆˆ	fd„t        |«      D «       df«       ‰	S )zY
        Helper function to implement map, starmap and their async counterparts.
        NÚ__len__r'   r   r   ©rx  c              3   óT   •K  — | ]  \  }}t         ‰j                  |‰|fi ff–— Œ! y ­wr-   r  )r^  rÚ   r�  ÚmapperrÒ   s      €€r2   r`  z"Pool._map_async.<locals>.<genexpr>'  s5   øè ø€ ò CÙ"& ! Qô  $ f§k¡k°1°f¸q¸dÀBÐ%GÔHñ Cùrƒ  )r#  r"  rø   r5   Údivmodr¾  ræ  rÂ  r�  Ú	MapResultrÌ  rË  rÉ   rI  )
rR   rn  rs  r­  rt  rw  rx  Úextrar’  rÒ   s
      `     @r2   rq  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Ÿ;™;¨	´3°x³=À(Ø*8ô:ˆà�‰×Ñô CÜ*3°LÓ*AôCØDHðJô 	Kàˆr:   c              #   ót   K  — t        |«      }	 t        t        j                  ||«      «      }|sy | |f–— Œ)­wr-   )rH  Útupler<   Úislice)rn  ÚitÚsizer�  s       r2   r�  zPool._get_tasks+  s=   è ø€ ä�"‹XˆØÜ”i×&Ñ& r¨4Ó0Ó1ˆAÙØØ˜�)ŠOð	 ùs   ‚68c                 ó   — t        d«      ‚)Nz:pool objects cannot be passed between processes or pickled)r  rQ   s    r2   r°   zPool.__reduce__4  s   € Ü!ØHó
ð 	
r:   c                 ó8  — t        d«       | j                  t        k(  r|t        | _        | j                  r| j                  j                  «        | j                  j                  «        | j                  j                  d «       t        | j                  «       y y )Nzclosing pool)r    r#  r"  r6  rê  rg   rì  rù   rË  rÉ   rJ   rQ   s    r2   rù   z
Pool.close9  sk   € ÜˆnÔØ�;‰;œ#ÒÜˆDŒKØ�}Š}Ø—‘×#Ñ#Ô%Ø× Ñ ×&Ñ&Ô(Ø�O‰O×Ñ Ô%Ü × 4Ñ 4Õ5ð r:   c                 ó„   — t        d«       t        | _        | j                  j	                  «        | j                  «        y )Nzterminating pool)r    r3  r#  rì  r4  rú  rQ   s    r2   r4  zPool.terminateC  s.   € ÜÐ Ô!ÜˆŒØ×Ñ×&Ñ&Ô(Ø�‰Õr:   c                 ó   — t        | «       y r-   )rJ   )Útask_handlers    r2   Ú_stop_task_handlerzPool._stop_task_handlerI  s
   € ä˜LÕ)r:   c                 óì  — | j                   t        t        fv sJ ‚t        d«       t	        | j
                  «       t        d«       | j                  | j                  «       t        d«       t	        | j                  «       t        d«       t        | j                  «      D ]F  \  }}t        d|dz   t        | j                  «      |«       |j                  €Œ7|j                  «        ŒH t        d«       y )Nzjoining worker handlerújoining task handlerújoining result handlerzresult handler joinedzjoining worker %s/%s (%r)r   zpool join complete)r#  r6  r3  r    rJ   rì  r»  rî  rõ  rI  ræ  r¾  rz  r0  )rR   rÚ   rR  s      r2   r0  z	Pool.joinM  sÂ   € Ø�{‰{œu¤iÐ0Ñ0Ð0Ð0ÜÐ&Ô'Ü˜D×0Ñ0Ô1ÜÐ$Ô%Ø×Ñ × 2Ñ 2Ô3ÜÐ&Ô'Ü˜D×0Ñ0Ô1ÜÐ%Ô&Ü˜dŸj™jÓ)ò 	‰DˆAˆqÜÐ-¨q°1©u´c¸$¿*¹*³oÀqÔIØ�x‰xÑ#Ø—‘•ð	ô 	Ð"Õ#r:   c                 ób   — | j                   j                  «       D ]  }|j                  «        Œ y r-   )rç  r'  r…  )rR   Úes     r2   ÚrestartzPool.restart\  s'   € Ø—‘×&Ñ&Ó(ò 	ˆAØ�E‰E�Gñ	r:   c                 ó\  — t        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    Ú_rlockrP   Úis_aliver£   r  r«   rË   rÌ   )Úinqueuerº  ræ  s      r2   Ú_help_stuff_finishzPool._help_stuff_finish`  sy   € ô 	ÐGÔHØ�‰×ÑÔ Ø×#Ñ#Ô%¨'¯/©/×*>Ñ*>Ô*@Ø�O‰O× Ñ Ô"Ü�J‰J�qŒMð ×#Ñ#Ô%¨'¯/©/×*>Ñ*>Ö*@Ð%Ð*@Ð%r:   c                 ó&   — |j                  d «       y r-   )rÉ   )ÚclsrD  r:  s      r2   Ú_set_result_sentinelzPool._set_result_sentineli  s   € à�‰�TÕr:   c                 ó`  — t        d«       |j                  «        |j                  «        |j                  d «       t        d«        | j                  |
Ž  | j	                  ||«       |	�|	j                  «        |rBt        |d   d«      r3t        d«       |D ]#  }|j                  «       sŒ|j                  «        Œ% t        d«       | j                  |«       t        d«       |j                  «        |	� t        d«       |	j                  t        «       |rpt        |d   d«      rat        d	«       |D ]F  }|j                  «       sŒt        d
|j                  «       |j                  €Œ7|j                  «        ŒH t        d«       |r|j                  «        |r|j                  «        y y )Nzfinalizing poolz&helping task handler/workers to finishr   r4  zterminating workersr½  r¾  zjoining timeout handlerzjoining pool workerszcleaning up worker %dzpool workers joined)r    r4  rÉ   rÆ  rÉ  rø   r2  r»  rG   ÚTIMEOUT_MAXrÄ  r¸   rz  r0  rù   )rÈ  rC  rÅ  rD  r:  Úworker_handlerrº  Úresult_handlerrE  Útimeout_handlerÚhelp_stuff_finish_argsrR  s               r2   r÷  zPool._terminate_poolm  sr  € ô 	ÐÔ à× Ñ Ô"à×ÑÔ Ø�‰�dÔäÐ6Ô7Øˆ×ÑÐ 6Ñ7ð 	× Ñ  ¨4Ô0àÐ&Ø×%Ñ%Ô'ñ ”G˜D ™G [Ô1ÜÐ'Ô(Øò "�Ø—;‘;•=Ø—K‘K•Mð"ô 	Ð$Ô%Ø×Ñ˜|Ô,äÐ&Ô'Ø×ÑÔàÐ&ÜÐ+Ô,Ø× Ñ ¤Ô-á”G˜D ™G [Ô1ÜÐ(Ô)Øò !�Ø—:‘:•<äÐ1°1·5±5Ô9Ø—x‘xÑ+ØŸ™�ð!ô Ð'Ô(áØ�M‰MŒOÙØ�N‰NÕð r:   c                 óh   — | j                   D �cg c]  }|j                  j                  ‘Œ c}S c c}w r-   )ræ  rz  rŸ   )rR   r  s     r2   Úprocess_sentinelszPool.process_sentinels©  s$   € à+/¯:©:Ö6 a�—‘×!Ó!Ò6Ð6ùÒ6s   �/)NNru   NNNNNr   NNNNTNFFFNNNFrÀ  )r   r-   )NNNro   )Frp   rq   rr   rs   r  r�   r8  rA  rU  r—  r   rW   rä  r  rô  r�  rù  r   rö  r  re  r  rë  r   r  r<  r3  r-  r/  r*  rC  rF  rJ  rL  rS   r_   rN  rS  rY  rX  r_  r>  re  rÊ  ró  ro  r=   ry  r6   r“  r™  rm  rœ  r§  r{  rq  Ústaticmethodr�  r°   rù   r4  r»  r0  rÁ  rÆ  ÚclassmethodrÉ  r÷  ÚpropertyrÑ  ru   r:   r2   rÂ  rÂ  Ã  s'  „ ñð €OØ€FØ€JØ€KØ#€NØ!€MØ1ÐàBDØCGØ%)Ø56Ø#Ø!%Ø $Ø#'ØØØØ$ØØ!%ØØ&*Ø!&ó!x
òt,òHò
òò=òò8òòò3òò4óQòfòòò3ò	òò òòó
Góòò
ò"òKò
/ò(òò
)ò2ð  "¨ó <óAð 7;Ø48ó=óCó@ð8 89Ø+/ó@ð> &(¨bØ!°$ÈØ%)°tØ!%¨tÈØ(*Ø#'ó6òpó
,ð 37Ø04ó
ð <@Ø15óð0 ñó ðò
ò
6òð ñ*ó ð*ò$òð ñó ðð ñó ðð ñ9ó ð9ðv ñ7ó ñ7r:   rÂ  c                   ó˜   — e Zd ZdZdZdZdddddedddddfd„Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zdd„Zd„ Zdd„Zdd„Zd„ Zdd„Zd„ Zd„ Zy)rž  Nru   c                 óž  — || _         t        «       | _        t        j                  «       | _        t        t        «      | _        || _	        || _
        || _        || _        || _        || _        || _        || _        |	| _        |
| _        |xs d| _        || _        d| _        d| _        d | _        d | _        d | _        | || j                  <   y )Nru   F)r�  rð  Ú_mutexrE   r  Ú_eventrd  Újob_counterrr  rÌ  Ú	_callbackÚ_accept_callbackÚ_error_callbackÚ_timeout_callbackrq  r‰  r)  Ú_on_timeout_setÚ_on_timeout_cancelÚ_callbacks_propagateÚ	_send_ackÚ	_acceptedÚ
_cancelledri  rˆ  Ú_terminated)rR   rE  rw  rŸ  r   rx  r�  rI   rÓ  rÖ  r×  r›  rœ  r�  s                 r2   rW   zApplyResult.__init__·  sÄ   € ð -ˆÔÜ“fˆŒÜ—o‘oÓ'ˆŒÜœÓ%ˆŒ	ØˆŒØ!ˆŒØ /ˆÔØ-ˆÔØ!1ˆÔØˆŒØ)ˆÔØ$7ˆÔ!Ø-ˆÔØ"3ˆÔØ$7Ò$=¸2ˆÔ!Ø!ˆŒàˆŒØˆŒØˆÔØ"ˆÔØˆÔØˆˆd�i‰iÒr:   c                 ó˜   — dj                  | j                  j                  | j                  | j                  | j                  «       ¬«      S )Nz&<{name}: {id} ack:{ack} ready:{ready}>)r  ÚidÚackr  )rä   r|   rp   rr  râ  r  rQ   s    r2   r�   zApplyResult.__repr__Õ  s<   € Ø7×>Ñ>Ø—‘×(Ñ(Ø�y‰y˜dŸn™n°D·J±J³Lð ?ó 
ð 	
r:   c                 ó6   — | j                   j                  «       S r-   )rØ  r  rQ   s    r2   r  zApplyResult.readyÛ  s   € Ø�{‰{×!Ñ!Ó#Ð#r:   c                 ó   — | j                   S r-   )râ  rQ   s    r2   ÚacceptedzApplyResult.acceptedÞ  s   € Ø�~‰~Ðr:   c                 ó>   — | j                  «       sJ ‚| j                  S r-   )r  Ú_successrQ   s    r2   Ú
successfulzApplyResult.successfulá  s   € Ø�z‰zŒ|Ðˆ|Ø�}‰}Ðr:   c                 ó   — d| _         y)zOnly works if synack is used.TN)rã  rQ   s    r2   Ú_cancelzApplyResult._cancelå  s	   € àˆ�r:   c                 óP   — | j                   j                  | j                  d «       y r-   )rÌ  Úpoprr  rQ   s    r2   ÚdiscardzApplyResult.discardé  s   € Ø�‰�‰˜Ÿ	™	 4Õ(r:   c                 ó   — || _         y r-   )rä  ©rR   r‰   s     r2   r4  zApplyResult.terminateì  s
   € Ø!ˆÕr:   c                 óz   — 	 t        |xs d «      ‚# t         $ r | j                  d dt        «       f«       Y y w xY w©Nr   F)r   rJ  r   rô  s     r2   r.  zApplyResult._set_terminatedï  s<   € ð	6Ü˜vš{¨˜^Ó,Ð,øÜò 	6Ø�I‰I�d˜U¤M£OÐ4Ö5ð	6ús   ‚ ’%:¹:c                 ó8   — | j                   r| j                   gS g S r-   ©ri  rQ   s    r2   r©  zApplyResult.worker_pidsõ  s   € Ø%)×%5Ò%5�× Ñ Ð!Ð=¸2Ð=r:   c                 ó:   — | j                   j                  |«       y r-   )rØ  r{  r1  s     r2   r{  zApplyResult.waitø  s   € Ø�‰×Ñ˜Õ!r:   c                 ó¬   — | j                  |«       | j                  «       st        ‚| j                  r| j                  S | j                  j
                  ‚r-   )r{  r  r   rì  r]   Ú	exceptionr1  s     r2   r  zApplyResult.getû  s>   € Ø�	‰	�'ÔØ�z‰zŒ|ÜÐØ�=Š=Ø—;‘;Ðà—+‘+×'Ñ'Ð'r:   c                 ó‚   — |r
	  ||i |¤Ž y y # | j                   $ r ‚ t        $ r}t        d|d¬«       Y d }~y d }~ww xY w)Nz"Pool callback raised exception: %rr   r¹   )rà  rÂ   rA   )rR   rê   r8   rC   rz   s        r2   Úsafe_apply_callbackzApplyResult.safe_apply_callback  sT   € Ùð"Ù�TÐ$˜VÓ$ð øð ×,Ñ,ò ØÜò "ÜÐ:¸CØ ÷"ò "ûð"ús   „ Ž>¦9¹>c                 óŠ   — | j                   �7| j                  | j                   ||r| j                  n| j                  ¬«       y y )N)rh  rI   )rÝ  rý  r‰  rq  )rR   rh  s     r2   rj  zApplyResult.handle_timeout  sB   € Ø×!Ñ!Ð-Ø×$Ñ$Ø×&Ñ&¨TÙ.2˜×*Ò*¸¿¹ð %õ ð .r:   c                 óF  — | j                   5  | j                  r| j                  | «       |\  | _        | _        | j                  j                  «        | j                  r&| j                  j                  | j                  d «       | j                  r2| j                  r&| j                  | j                  | j                  «       | j                  �>| j                  r2| j                  s&| j                  | j                  | j                  «       d d d «       y # 1 sw Y   y xY wr-   )r×  rß  rì  r]   rØ  r…  râ  rÌ  rñ  rr  rÚ  rý  rÜ  ©rR   rÚ   r®   s      r2   rJ  zApplyResult._set  sÐ   € Ø�[‰[ñ 	7Ø×&Ò&Ø×'Ñ'¨Ô-Ø),Ñ&ˆDŒM˜4œ;Ø�K‰K�O‰OÔØ�~Š~ð —‘—‘ §	¡	¨4Ô0ð �~Š~ $§-¢-Ø×(Ñ(Ø—N‘N D§K¡Kô1à—‘Ð'Ø×(Ò(°·²Ø×(Ñ(Ø×(Ñ(¨$¯+©+ô7÷#	7÷ 	7ñ 	7ús   �DDÄD c                 óö  — | j                   5  | j                  rJ| j                  r>d| _        |r+| j                  t        || j
                  |«      cd d d «       S 	 d d d «       y d| _        || _        || _        | j                  «       r&| j                  j                  | j
                  d «       | j                  r'| j                  | | j                  | j                  «       t        }| j                  r	 | j                  ||«       | j                  r)|r'| j                  ||| j
                  |«      cd d d «       S d d d «       y # | j                   $ r t        }‚ t"        $ r	 t        }Y Œdw xY w# 1 sw Y   y xY wr  )r×  rã  rá  râ  r×   rr  rˆ  ri  r  rÌ  rñ  rÞ  r‰  rq  rØ   rÛ  Ú_propagate_errorsrÂ   )rR   rÚ   r¦  r¸   r¦   r£  s         r2   r¥  zApplyResult._ack*  sE  € Ø�[‰[ñ 	JØ�Š 4§>¢>Ø!%�”ÙØŸ>™>¬$°°T·Y±YÀÓI÷		Jñ 	Jð
 ÷	Jð 	Jð "ˆDŒNØ"/ˆDÔØ"ˆDÔØ�z‰zŒ|à—‘—‘ §	¡	¨4Ô0Ø×#Ò#Ø×$Ñ$ T¨4×+=Ñ+=¸t¿}¹}ÔMÜˆHØ×$Ò$ð$Ø×)Ñ)¨#¨}Ô=ð �~Š~¡(Ø—~‘~ h°°T·Y±YÀÓI÷3	J÷ 	Jò 	Jøð$ ×-Ñ-ò Ü#�HØÜ ò $Ü#’Hð$ú÷+	Jð 	Jús=   �AE/ÁE/Á$BE/Ã5EÄ+E/Å$E,Å)E/Å+E,Å,E/Å/E8r-   rÀ  )rp   rq   rr   r(  r0  r1  rÒ  rW   r�   r  rê  rí  rï  rò  r4  r.  r©  r{  r  rý  rj  rJ  r¥  ru   r:   r2   rž  rž  ²  s   „ Ø€LØ€IØ€Nà8<Ø"&°tÈ$ØÐ3FØ $¸Ø%'°$Ø $ó ò<
ò$òòòò)ò"ó6ò>ó"ó(ò"óò7ó*Jr:   rž  c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)r¯  c                 óR  — t         j                  | |||¬«       d| _        || _        d g|z  | _        dg|z  | _        d g|z  | _        d g|z  | _        || _        |dk  r/d| _	        | j                  j                  «        || j                  = y ||z  t        ||z  «      z   | _	        y )Nr«  TFr   )rž  rW   rì  Ú_lengthr]   râ  ri  rˆ  Ú
_chunksizeÚ_number_leftrØ  r…  rr  rÛ  )rR   rE  rt  Úlengthrw  rx  s         r2   rW   zMapResult.__init__M  s±   € Ü×ÑØ�%˜°.ð 	ô 	
ð ˆŒØˆŒØ�f˜v‘oˆŒØ˜ 6Ñ)ˆŒØ ˜6 F™?ˆÔØ#˜f v™oˆÔØ#ˆŒØ˜Š>Ø !ˆDÔØ�K‰K�O‰OÔØ�d—i‘iÑ à &¨)Ñ 3´d¸6ÀIÑ;MÓ6NÑ NˆDÕr:   c                 óž  — |\  }}|rÅ|| j                   || j                  z  |dz   | j                  z   | xj                  dz  c_        | j                  dk(  rt| j                  r| j                  | j                   «       | j                  r&| j
                  j                  | j                  d «       | j                  j                  «        y y d| _
        || _         | j                  r| j                  | j                   «       | j                  r&| j
                  j                  | j                  d «       | j                  j                  «        y )Nr   r   F)r]   r  r  rÚ  râ  rÌ  rñ  rr  rØ  r…  rì  rÜ  )rR   rÚ   Úsuccess_resultÚsuccessrÒ   s        r2   rJ  zMapResult._set_  sð   € Ø(‰ˆ�ÙØIOˆD�K‰K˜˜DŸO™OÑ+¨Q°©U°d·o±oÑ,EÐFØ×Ò Ñ"ÕØ× Ñ  AÒ%Ø—>’>Ø—N‘N 4§;¡;Ô/Ø—>’>Ø—K‘K—O‘O D§I¡I¨tÔ4Ø—‘—‘Õ!ð &ð "ˆDŒMØ ˆDŒKØ×#Ò#Ø×$Ñ$ T§[¡[Ô1Ø�~Š~Ø—‘—‘ §	¡	¨4Ô0Ø�K‰K�O‰OÕr:   c                 óX  — || j                   z  }t        |dz   | j                   z  | j                  «      }t        ||«      D ]/  }d| j                  |<   || j
                  |<   || j                  |<   Œ1 | j                  «       r'| j                  j                  | j                  d «       y y ©Nr   T)r  r½  r  rò   râ  ri  rˆ  r  rÌ  rñ  rr  )rR   rÚ   r¦  r¸   r8   r,  rG   Újs           r2   r¥  zMapResult._acks  s—   € Ø�D—O‘OÑ#ˆÜ�A˜‘E˜TŸ_™_Ñ,¨d¯l©lÓ;ˆÜ�u˜dÓ#ò 	3ˆAØ $ˆD�N‰N˜1ÑØ"%ˆD×Ñ˜QÑØ%2ˆD×Ñ Ò"ð	3ð �:‰:Œ<Ø�K‰K�O‰O˜DŸI™I tÕ,ð r:   c                 ó,   — t        | j                  «      S r-   )Úallrâ  rQ   s    r2   rê  zMapResult.accepted}  s   € Ü�4—>‘>Ó"Ð"r:   c                 óF   — | j                   D �cg c]  }|sŒ|‘Œ	 c}S c c}w r-   rø  rÏ   s     r2   r©  zMapResult.worker_pids€  s   € Ø#×/Ñ/Ö7˜²3’Ò7Ð7ùÒ7s   �—N)rp   rq   rr   rW   rJ  r¥  rê  r©  ru   r:   r2   r¯  r¯  K  s   „ òOò$ò(-ò#ó8r:   r¯  c                   óJ   — e Zd ZdZefd„Zd„ Zd
d„ZeZd„ Z	d„ Z
d„ Zd„ Zd	„ Zy)rŽ  Nc                 ó"  — t        j                  t        j                  «       «      | _        t	        t
        «      | _        || _        t        «       | _	        d| _
        d | _        d| _        i | _        g | _        || _        | || j                  <   y rö  )rE   Ú	Conditionrð  r\   rd  rÙ  rr  rÌ  r   Ú_itemsrn  r  Ú_readyÚ	_unsortedÚ_worker_pidsr)  )rR   rE  rÓ  s      r2   rW   zIMapIterator.__init__‹  sq   € Ü×(Ñ(¬¯©Ó)9Ó:ˆŒ
ÜœÓ%ˆŒ	ØˆŒÜ“gˆŒØˆŒØˆŒØˆŒØˆŒØˆÔØ$7ˆÔ!Øˆˆd�i‰iÒr:   c                 ó   — | S r-   ru   rQ   s    r2   Ú__iter__zIMapIterator.__iter__˜  rD  r:   c                 óì  — | j                   5  	 | j                  j                  «       }d d d «       \  }}|r|S t        |«      ‚# t        $ r™ | j                  | j
                  k(  rd| _        t        ‚| j                   j                  |«       	 | j                  j                  «       }n9# t        $ r- | j                  | j
                  k(  rd| _        t        ‚t        ‚w xY wY Œ½w xY w# 1 sw Y   ŒÂxY wr  )r\   r  ÚpopleftrW  rn  r  r  r“  r{  r   rÂ   )rR   rI   r«  r  rY   s        r2   rd  zIMapIterator.next›  sß   € Ø�Z‰Zñ 	'ð'Ø—{‘{×*Ñ*Ó,�÷	'ð  ‰ˆ�ÙØˆLÜ˜ÓÐøô! ò 'Ø—;‘; $§,¡,Ò.Ø"&�D”KÜ'Ð'Ø—
‘
—‘ Ô(ð'ØŸ;™;×.Ñ.Ó0‘DøÜ!ò 'Ø—{‘{ d§l¡lÒ2Ø&*˜œÜ+Ð+Ü&Ð&ð	'úñ ð'ú÷	'ð 	'úsA   �C*�AÁA
C'ÂB+Â*C'Â+6C!Ã!C'Ã$C*Ã&C'Ã'C*Ã*C3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d| _        | j                  | j                  = d d d «       y # 1 sw Y   y xY wr  )r\   rn  r  r  r  rñ  r^   r  r  rÌ  rr  r   s      r2   rJ  zIMapIterator._set³  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(  r8d| _        | j                   j	                  «        | j
                  | j                  = d d d «       y # 1 sw Y   y xY wr  )r\   r  rn  r  r^   rÌ  rr  )rR   r  s     r2   r�  zIMapIterator._set_lengthÄ  s\   € Ø�Z‰Zñ 	+Ø!ˆDŒLØ�{‰{˜dŸl™lÒ*Ø"�”Ø—
‘
×!Ñ!Ô#Ø—K‘K §	¡	Ð*÷	+÷ 	+ñ 	+ús   �AA/Á/A8c                 ó:   — | j                   j                  |«       y r-   )r  r  )rR   rÚ   r¦  r¸   r8   s        r2   r¥  zIMapIterator._ackÌ  s   € Ø×Ñ× Ñ  Õ%r:   c                 ó   — | j                   S r-   )r  rQ   s    r2   r  zIMapIterator.readyÏ  s   € Ø�{‰{Ðr:   c                 ó   — | j                   S r-   )r  rQ   s    r2   r©  zIMapIterator.worker_pidsÒ  s   € Ø× Ñ Ð r:   r-   )rp   rq   rr   r(  rÒ  rW   r  rd  Ú__next__rJ  r�  r¥  r  r©  ru   r:   r2   rŽ  rŽ  ˆ  s9   „ Ø€Là2Eó  òóð, €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d| _        | j                  | j                  = d d d «       y # 1 sw Y   y xY wr  )	r\   r  r  rn  r^   r  r  rÌ  rr  r   s      r2   rJ  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)rp   rq   rr   rJ  ru   r:   r2   r˜  r˜  Ú  s   „ ó+r:   r˜  c                   ó:   — e Zd ZddlmZ eZdd„Zd„ Zed„ «       Z	y)Ú
ThreadPoolr   )rä  Nc                 ó4   — t         j                  | |||«       y r-   )rÂ  rW   )rR   rW  r’   r“   s       r2   rW   zThreadPool.__init__ï  s   € Ü�‰�d˜I {°HÕ=r:   c                 óÆ   ‡ — t        «       ‰ _        t        «       ‰ _        ‰ j                  j                  ‰ _        ‰ j                  j
                  ‰ _        ˆ fd„}|‰ _        y )Nc                 óL   •— 	 d‰j                  | ¬«      fS # t        $ r Y yw xY wr
  )r¬   r   rh  s    €r2   r  z.ThreadPool._setup_queues.<locals>._poll_resultø  s0   ø€ ð#Ø˜TŸ_™_°W˜_Ó=Ð=Ð=øÜò #Ù"ð#ús   ƒ —	#¢#)r   rø  rí  rÉ   rª   r  r¬   r  rj  s   ` r2   rÊ  zThreadPool._setup_queuesò  sF   ø€ Ü›ˆŒÜ›ˆŒØŸ-™-×+Ñ+ˆŒØŸ.™.×,Ñ,ˆŒô	#ð
 )ˆÕr:   c                 óþ   — | j                   5  | j                  j                  «        | j                  j                  d gt	        |«      z  «       | j                   j                  «        d d d «       y # 1 sw Y   y xY wr-   )Ú	not_emptyÚqueuerg   Úextendr¾  ra   )rÅ  rº  r:  s      r2   rÆ  zThreadPool._help_stuff_finishÿ  sa   € ð ×Ññ 	+Ø�M‰M×ÑÔ!Ø�M‰M× Ñ  $ ¬#¨d«)Ñ!3Ô4Ø×Ñ×(Ñ(Ô*÷	+÷ 	+ñ 	+ús   �AA3Á3A<)NNru   )
rp   rq   rr   Údummyrä  r   rW   rÊ  rÒ  rÆ  ru   r:   r2   r&  r&  ê  s(   „ å.Ø€Gó>ò)ð ñ+ó ñ+r:   r&  r-   )er†  r  r<   r¼   rÈ   rû   r»   rE   rË   rÝ  Úcollectionsr   Ú	functoolsr   Ú r   r   r   Úcommonr	   r
   r   r   r   Úcompatr   r   r   rï   r   r.  r   Ú
exceptionsr   r   r   r   r   r   r   r   r,  r   r   r   r    r!   rã   Úversion_infort   ÚsystemÚ_winr$   r(  r|  r%   rË  r.   Ú	SemaphorerV   r"  r6  r3  rØ   râ   rá   r×   rÊ   r*   rÇ   rå   r,  rú   rÒ  ró   rô   ÚcountrÙ  rð  r3   r9   r>   rA   rJ   rL   rÂ   rw   r‡   r‹   r�   r  r8  rA  rU  r—  rÂ  rž  r¯  rŽ  r˜  r&  ru   r:   r2   ú<module>r:     sf  ðó Û Û Û 	Û Û Û 
Û Û Û å Ý ç $Ý ÷õ ÷ 4Ñ 3Ý  Ý ÷÷ ñ õ ß ß *Ñ *ð€ð 
×Ñ�qÑ˜QÑ€à€8‡?�?Ó˜	Ò!õ 0Ø�Gå Ø�n‰n€GðØ×'Ñ'€Kð
 ×Ñ�vÒØ×$Ñ$�Jð ×%Ñ%€Jð €Ø	€Ø€	ð €Ø	€Ø€Ø€Ø	€ð
 	
€Ø€
Ø€
ñ ˜6 9¨dÓ3Ð ð Ð Ù��G˜QÓ€Ø,/Ð )Ø/2Ð ,àˆi�o‰oÓ€à‡~�~€òòò5ò2óô
4)˜*ô 4)ôv"˜ô "ô"'�Iô 'ò"÷{ñ {ôF&�ô &ôR"(�ô "(ôJH�*ô HôV@�Zô @ôFv'�Jô v'÷rh7ñ h7÷^RJñ RJôr68�ô 68÷zK!ñ K!ôd	+˜Lô 	+ô +�õ +øðO= ò ØƒKðús   ÃH ÈHÈH