Ë
    ^ãjš  ã                   ó:  — 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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/m0Z0 dZ1ejd                  d    dk(  Z3 ejh                  «       dk(  r	ddl5m6Z7 eZ8nd dlm9Z7 ejp                  Z8	 ejt                  Z:ejd                  dk\  rejx                  Z=nejz                  Z=d Z>dZ?dZ@d ZAdZBdZCdZDdZEd ZFdZGdZH eIedd«      ZJdZK eIedd «      ZFdZLdZM ejœ                  «       ZOej                   ZPd„ ZQd„ ZRd „ ZSd!„ ZTdBd"„ZU G d#„ d$e=«      ZV G d%„ d&eW«      ZX G d'„ d(eW«      ZYd)„ ZZ G d*„ d+«      Z[ G d,„ d-e!«      Z\ G d.„ d/e\«      Z] G d0„ d1e\«      Z^ G d2„ d3e\«      Z_ G d4„ d5e\«      Z` G d6„ d7«      Za G d8„ d9«      Zb G d:„ d;eb«      Zc G d<„ d=«      Zd G d>„ d?ed«      Ze G d@„ dAea«      Zfy# e;$ r dZ:Y �Œ4w xY w)Cé    N)Údeque)Úpartialé   )Ú	cpu_countÚget_context)Úutil)ÚTERM_SIGNALÚclear_terminate_handler_firedÚhuman_statusÚpickle_loadsÚreset_signalsÚrestart_stateÚterminate_handler_fired)Ú	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     úO/var/www/html/metafoliadorv2/venv/lib/python3.12/site-packages/billiard/pool.pyÚ_get_send_offsetr5   y   sJ   € ðØ×'Ñ'ˆð €~Ü”{ J×$5Ñ$5Ó$7Ó8Ð8Ø€Møô	 ò ØŠðús   ‚0 °>½>c                 ó$   — t        t        | Ž «      S r/   )ÚlistÚmap©Úargss    r4   Úmapstarr;   ƒ   s   € Ü”�T�
ÓÐó    c                 óL   — t        t        j                  | d   | d   «      «      S )Nr   r   )r7   Ú	itertoolsÚstarmapr9   s    r4   Ústarmapstarr@   ‡   s"   € Ü”	×!Ñ! $ q¡'¨4°©7Ó3Ó4Ð4r<   c                 óT   —  t        j                  «       j                  | g|¢­i |¤Ž y r/   )r   Ú
get_loggerÚerror)Úmsgr:   Úkwargss      r4   rC   rC   ‹   s#   € Ø„D‡O�OÓ×Ñ˜CÐ1 $Ò1¨&Ó1r<   c                 óT   — | t        j                  «       ur| j                  |«       y y r/   )Ú	threadingÚcurrent_threadÚstop)ÚthreadÚtimeouts     r4   Ústop_if_not_currentrL   �   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    r4   ÚshrinkzLaxBoundedSemaphore.shrink˜   s   € Ø×Ò˜qÑ ÕØ�‰�r<   Nc                 ó>   — t         j                  | |«       || _        y r/   ©Ú
_SemaphoreÚ__init__rQ   ©rT   ÚvalueÚverboses      r4   rY   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rP   )Ú_condrQ   Ú_valueÚnotifyrS   s    r4   Ú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rP   )r^   r_   rQ   Ú
notify_all©rT   Úconds     r4   Ú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_   rQ   rX   rf   rS   s    r4   ÚclearzLaxBoundedSemaphore.clear¯   s6   € Ø—+‘+ × 3Ñ 3Ò3Ü×"Ñ" 4Ô(ð —+‘+ × 3Ñ 3Õ3r<   c                 ó@   — t         j                  | ||«       || _        y r/   rW   rZ   s      r4   rY   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rP   )Ú_Semaphore__condrQ   Ú_Semaphore__valuer`   rd   s     r4   ra   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rP   )rl   rm   rQ   Ú	notifyAllrd   s     r4   rf   zLaxBoundedSemaphore.release¿   sT   € Ø×(Ñ(ˆDØñ %Ø×)Ñ)¨D×,?Ñ,?Ò?Ø×*Ò*¨aÑ/Õ*Ø—N‘NÔ$÷%÷ %ñ %úrg   c                 ó–   — | j                   | j                  k  r0t        j                  | «       | j                   | j                  k  rŒ/y y r/   )rm   rQ   rX   rf   rS   s    r4   ri   zLaxBoundedSemaphore.clearÆ   s:   € Ø×(Ñ(¨4×+>Ñ+>Ò>Ü×"Ñ" 4Ô(ð ×(Ñ(¨4×+>Ñ+>Õ>r<   ©r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rU   ÚPY3rY   ra   rf   ri   © r<   r4   rN   rN   ”   s9   „ ñ+òñ ó	(ò	$ò	&ó	)ó
	(ò	ò	%ó	)r<   rN   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Úexcr[   ÚsuperrY   )rT   r|   r[   Ú	__class__s      €r4   rY   zMaybeEncodingError.__init__Ó   s0   ø€ Ü˜“9ˆŒÜ˜%“[ˆŒ
Ü‰Ñ˜Ÿ™ 4§:¡:Õ.r<   c                 óN   — d| j                   j                  ›dt        | «      ›d�S )Nú<z: ú>)r~   rr   ÚstrrS   s    r4   Ú__repr__zMaybeEncodingError.__repr__Ø   s   � Ø!Ÿ^™^×4Ó4´c¸$µiÐ@Ð@r<   c                 ó<   — d| j                   ›d| j                  ›d�S )NzError sending result: 'z'. Reason: 'z'.)r[   r|   rS   s    r4   Ú__str__zMaybeEncodingError.__str__Û   s   � à�J‹J˜Ÿ›ð"ð 	"r<   )rr   rs   rt   ru   rY   rƒ   r…   Ú__classcell__©r~   s   @r4   ry   ry   Ï   s   ø„ ñ'ô/ò
Aö"r<   ry   c                   ó   — e Zd ZdZy)ÚWorkersJoinedzAll workers have terminated.N)rr   rs   rt   ru   rw   r<   r4   r‰   r‰   à   s   „ Ú&r<   r‰   c                 ó   — t        «       ‚r/   )r   )ÚsignumÚframes     r4   Ú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)rT   r›   rœ   r�   r”   r•   r–   Úsentinelr™   rš   rž   r—   rŸ   s                r4   rY   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�   Ú_writerr1   ÚinqW_fdÚ_readerÚoutqR_fdÚsynqR_fdÚsynqW_fdr5   Úsend_syn_offsetÚ_send_syn_offsetÚsendÚ
_quick_putÚrecvÚ
_quick_getÚsend_job_offset)rT   Úobjs     r4   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Ÿ   rS   s    r4   Ú
__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‘   rw   )ÚstatusÚ_exitÚ	_exitcodes    €€r4   Ú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Ú	ExceptionrC   Ú_do_exit)rT   r¸   rº   r|   r¶   r·   s       @@r4   Ú__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¶   )rT   rº   Úexitcoder|   s       r4   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/   rw   ©rT   rº   s     r4   rÂ   zWorker.on_loop_start<  ó   € Ør<   c                 ó   — |S r/   rw   )rT   Úresults     r4   Ú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ŒOd }	 d |	 ||i |¤Ž«      f}	  |t&        ||||ff«       |dz  }|�|‚|dkD  r[t1        «       }|dk  rt3        d«       |dkD  r<||kD  r7t5        t6        j9                  ||«      «       t:        ‰ j=                  |¬«       S |€ŒØ|r||k  rŒà |d|«       |r$||k(  rt:        nt>        	 ‰ j=                  |¬«       S t@        ‰ j=                  |¬«       S # t        $ r:}t        «       r‚ dt        «       f}t!        |t"        t$        f«      r|}Y d }~�Œd }~w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 }~�Œfd }~ww xY w# ‰ j=                  |¬«       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)rC   r�   r¥   r1   ÚNACKÚACK)ÚjidÚiÚreqÚtype_r:   Ú_wait_for_synrT   s        €€r4   Úwait_for_synz%Worker.workloop.<locals>.wait_for_synN  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Ú   ÚBaseExceptionr   r   Ú
isinstanceÚ
SystemExitÚKeyboardInterruptÚREADYrÄ   r½   r¼   ry   r   rC   r#   ÚMAXMEM_USED_FMTÚformatÚ
EX_RECYCLEÚ_ensure_messages_consumedrÉ   r,   )rT   r"   Únowrº   rË   r¤   r¨   r–   r—   rÕ   râ   rà   rá   rÝ   rÞ   Úargs_ÚjobrÜ   Úfunr:   rE   ÚconfirmÚexit_excrÔ   r|   Ú_ÚtbÚwrappedÚeinfoÚused_kbrß   s   `                             @r4   rÃ   zWorker.workloopB  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˜Ù&Ø$Ø#�Hð/+Ø"&©±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ñh Ð1°9Ô=ÙØ%.°(Ò%:•zÄ
ÐJð ×*Ñ*°YÐ*Õ?ô ð ×*Ñ*°YÐ*Õ?øô_ )ò -+Ü2Ô4ð< "Ø"'¬«Ð!9˜Ü% c¬JÔ8IÐ+JÔKð (+˜Hÿùð[-+ûô` %ò 	$Ü#&§<¡<£>™˜˜1˜bð$Ü&8¸¸fÀQ¹iÓ&H˜GÜ$1Ü 2°G¸Rð3ó %˜Eñ  ¤¨¨a°%¸°ÀÐ(IÐ JÔKá "ø¡ú¥ûð	$ûð> ×*Ñ*°YÐ*Õ?úsŒ   ÂAI5 Ã$G Ã5H ÄAI5 Å0I5 Å3I5 Å;I5 Æ*I5 Ç	HÇ/H Ç:I5 È HÈI5 È	I2ÈI-È*5I!ÉI-É!I$É$I-É'I5 É-I2É2I5 É5J	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_LIMITr[   r"   rÍ   rÎ   Ú,GUARANTEE_MESSAGE_CONSUMPTION_RETRY_INTERVALr#   )rT   rá   Úretrys      r4   rì   z Worker._ensure_messages_consumed¾  sh   € ð ×$Ò$ØäÔDÓEò 	EˆEØ×$Ñ$×*Ñ*¨iÒ7ÜÐBÀEÔJÙÜ�J‰JÔCÕDð		Eô
 	ð ô 	àr<   c                 óB  — t        «        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)r
   Úhasattrr›   r£   Úcloserœ   r¥   r”   r•   r   rš   ÚSIG_SOFT_TIMEOUTÚsignalr�   ÚSIGINTÚSIG_IGNr0   rS   s    r4   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 ©NTrw   )rK   Úloadsr  s     €r4   Ú_recvz'Worker._make_recv_method.<locals>._recvô  s   ø€ Ø¡¡{£}Ó!5Ð5Ð5r<   c                 ó(   •—  ‰| «      r	d ‰«       fS y©NT©FNrw   )rK   Ú_pollÚgets    €€r4   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©rK   r  r   )rK   r  s    €r4   r
  z'Worker._make_recv_method.<locals>._recvü  s.   ø€ ð'Ø¡¨WÔ!5Ð5Ð5øÜ—{‘{ò 'Ù&ð'ús   ƒ
 Ž$£$)r  rÿ   r¥   Úpollr  r   )rT   Úconnr
  r  r  r  s      @@@r4   Ú_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à   )rT   r	  s     r4   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)
ræ   r,   ÚEOFErrorÚIOErrorr   ÚerrnoÚEINTRr’   rr   rÉ   )r"   ÚreadyrÝ   r|   Ú_receiveÚshould_shutdowns       €€r4   Ú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"   )rT   r  r"  r   r!  s      @@r4   r  zWorker._make_protected_receive  s9   ù€ Ø×)Ñ)¨$Ó/ˆØ37·>²>˜$Ÿ.™.×/Ò/Àtˆäö 	ð$ ˆr<   )
NNrw   NNNTTNNr/   )rr   rs   rt   rY   r    r²   rÆ   rÅ   rÂ   rÕ   r"   r   rÃ   rì   rÁ   r  r   rÀ   r  rw   r<   r4   r�   r�   ì   s`   „ àHJØ7;Ø48Ø=Aó(ò"ò
ò3ó,ò òð #¨	°tó z@òxò ò<ð. )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   rY   ÚRUNÚ_stateÚ_was_startedÚdaemon)rT   r:   rE   s      r4   rY   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   rC   r’   rr   Ú_killr¾   r¿   r	   r½   r¸   rÄ   r¶   ©rT   r|   s     r4   Ú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)rT   r:   rE   r~   s      €r4   r2  zPoolThread.start;  s   ø€ Ø ˆÔÜŒj˜$Ñ% tÐ6¨vÓ6r<   c                  ó   — y r/   rw   rS   s    r4   Úon_stop_not_startedzPoolThread.on_stop_not_started?  rÒ   r<   c                 ó`   — | j                   r| j                  |«       y | j                  «        y r/   )r*  Újoinr4  ©rT   rK   s     r4   rI   zPoolThread.stopB  s&   € Ø×ÒØ�I‰I�gÔØØ× Ñ Õ"r<   c                 ó   — t         | _        y r/   )Ú	TERMINATEr)  rS   s    r4   Ú	terminatezPoolThread.terminateH  s	   € Üˆ�r<   c                 ó   — t         | _        y r/   )ÚCLOSEr)  rS   s    r4   r   zPoolThread.closeK  s	   € Üˆ�r<   r/   )rr   rs   rt   rY   r0  r2  r4  rI   r:  r   r†   r‡   s   @r4   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}   rY   )rT   r@  r~   s     €r4   rY   zSupervisor.__init__Q  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   r6  )rT   r@  Ú
prev_stateró   s       r4   r-  zSupervisor.bodyU  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%)rr   rs   rt   rY   r-  r†   r‡   s   @r4   r>  r>  O  s   ø„ ôö(r<   r>  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}   rY   )rT   rI  rË   rJ  r@  rK  r~   s         €r4   rY   zTaskHandler.__init__v  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)rK  rI  rË   Úiterr  Ú	enumerater)  r"   r  rÄ   Ú_setr   ÚKeyErrorr   Útell_others)
rT   rK  rI  rË   ÚtaskseqÚ
set_lengthÚtaskrÜ   rï   Úinds
             r4   r-  zTaskHandler.body~  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)rJ  rË   r@  r"   r  )rT   rJ  rË   r@  Úps        r4   rR  zTaskHandler.tell_others¨  s€   € Ø—=‘=ˆØ�h‰hˆØ�y‰yˆð
	EäÐCÔDØ�L‰L˜Ôô Ð<Ô=Øò �Ù�D•	ñô
 	Ð$Õ%øô ò 	EÜÐCÖDð	Eús   ¦6A) Á)B Á?B c                 ó$   — | j                  «        y r/   )rR  rS   s    r4   r4  zTaskHandler.on_stop_not_started»  s   € Ø×ÑÕr<   )rr   rs   rt   rY   r-  rR  r4  r†   r‡   s   @r4   rG  rG  t  s   ø„ ôò(òT&ö&r<   rG  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/   )Ú	processesrK  Út_softÚt_hardÚ_itr}   rY   )rT   r]  rK  r^  r_  r~   s        €r4   rY   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      €r4   ú	<genexpr>z1TimeoutHandler._process_by_pid.<locals>.<genexpr>Ê  ó,   øè ø€ ò 
Ù!˜!˜TØ�x‰x˜3Šð �1ŒIñ
ùó   ƒ #©NN)ÚnextrO  r]  rÑ   s    `r4   Ú_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"   rk  Ú_worker_pidÚhandle_timeoutr.  r  ÚOSErrorr   r  ÚESRCH)rT   rï   ÚprocessÚ_indexr|   s        r4   Ú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 %rFrm  )r  r"   r   Ú_timeoutrP  Ú_jobr   rk  ro  rp  Ú_trywaitkill)rT   rï   rs  rt  s       r4   Ú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  ÚSIGTERMr:  Ú_popenÚwaitrq  ÚSIGKILLr.  ©rT   Úworkers     r4   ry  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   )r2  rK   s     r4   Ú
_timed_outz2TimeoutHandler.handle_timeouts.<locals>._timed_out  s    € Ù¡ØÜ‹{˜e g™oÒ-Øð .r<   c              3   ó,   •K  — | ]  }|‰v sŒ|–— Œ y ­wr/   rw   )rd  ÚkrK  s     €r4   rf  z1TimeoutHandler.handle_timeouts.<locals>.<genexpr>  s   øè ø€ Ò; !°°U²
œAÑ;ùó   ƒ	�)r_  r^  Úsetru  rz  r)  r(  ÚcopyrK  ÚitemsÚ_time_acceptedÚ_soft_timeoutrw  Úadd)rT   r_  r^  Údirtyru  rz  r‡  rÜ   rï   Úack_timeÚsoft_timeoutÚhard_timeoutrK  s               @r4   Ú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"   ©rT   ró   s     r4   r-  zTimeoutHandler.body0  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/   )r`  r•  rj  ÚStopIteration©rT   r:   s     r4   Úhandle_eventzTimeoutHandler.handle_event9  sB   € Ø�8‰8ÐØ×+Ñ+Ó-ˆDŒHð	Ü�—‘�NøÜò 	ØˆDŽHð	ús   £9 ¹AÁA)rr   rs   rt   rY   rk  ru  rz  ry  r•  r-  r›  r†   r‡   s   @r4   r[  r[  ¿  s,   ø„ ôòòò'ò*ò.$òL)ör<   r[  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)rJ  r  rK  r  Újoin_exited_workersÚputlockr   r`  Ú_shutdown_completeÚcheck_timeoutsÚon_job_readyÚon_ready_countersÚ_make_methodsr}   rY   )rT   rJ  r  rK  r  rŸ  r   r   r¢  r£  r¤  r~   s              €r4   rY   zResultHandler.__init__D  sv   ø€ ð !ˆŒØˆŒØˆŒ
ØˆŒ	Ø#6ˆÔ ØˆŒØ*ˆÔØˆŒØ"'ˆÔØ,ˆÔØ(ˆÔØ!2ˆÔØ×ÑÔÜ‰ÑÕr<   c                 ó(   — | j                  d¬«       y )NT)r•  )Úfinish_at_shutdownrS   s    r4   r4  z!ResultHandler.on_stop_not_startedV  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Ú_ackrQ  r0   )rï   rÜ   Útime_acceptedrº   r¨   rK  r   s        €€r4   Ú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rP   )
rQ  r¤  rj  rN  Úworker_pidsÚget_lockr[   r  rf   rP  )rï   rÜ   r°   r¤   ÚitemÚ
worker_pidrŸ   rK  r£  r   rT   s          €€€€r4   Úon_readyz-ResultHandler._make_methods.<locals>.on_readyh  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	   rq  r   r  rr  )rº   rÏ   r|   s      r4   Úon_deathz-ResultHandler._make_methods.<locals>.on_death  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))rQ  r"   )rU  Ústater:   Ústate_handlerss      €r4   Úon_state_changez4ResultHandler._make_methods.<locals>.on_state_changeŠ  s?   ø€ Ø‰KˆE�4ðFØ%�˜uÑ% tÒ,øÜò FÜÐ7¸ÀÖEðFús   ˆ ‘*©*)	rK  r   r   r£  rÚ   rè   rÌ   r¸  r¹  )
rT   r­  r³  rµ  r¹  rK  r£  r   r   r¸  s
   `    @@@@@r4   r¥  zResultHandler._make_methodsZ  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)  r9  )rT   rK   r  r¹  r  rU  r|   s          r4   Ú_process_resultzResultHandler._process_result’  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(  r`  r¼  rj  r™  r   )rT   r1   Úeventss      r4   r›  zResultHandler.handle_event­  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     r4   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 fullrB  z7result handler exiting: len(cache)=%s, thread._state=%s)r¡  r  rJ  rK  r  rŸ  r¢  r¹  r)  r9  r  r  r"   r‰   r   ÚabsÚminrÿ   rù   r¥   Úlen)rT   r•  r  rJ  rK  r  rŸ  r¢  r¹  Útime_terminater  rU  r|   rí   rÜ   s                  r4   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  ri  ©F)rr   rs   rt   rY   r4  r¥  r¼  r›  r-  r§  r†   r‡   s   @r4   r�  r�  B  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.
    TNrw   c                 ó^	  — d|fd|fd|fd|fd|fd|fd|fd|	ffD ]&  \  }}t        |t        «      sŒt        |› d	|›d
�«      ‚ |�|dk  rt        d«      ‚|� t        |t        «      r|dk  rt        d«      ‚|xs
 t        «       | _        || _        | j                  «        t        «       | _
        i | _        t        | _        || _        || _        || _        || _        || _        || _        || _        |xs t*        | _        |
| _        || _        || _        || _        || _        i | _        || _        t        |xs | j                  d uxs | j                  d u«      | _        |r&t>        € tA        jB                  tE        d«      «       d }|€| jG                  «       n|| _$        |xs tK        | jH                  dz  «      | _&        tO        ||	xs d«      | _'        |�tQ        |«      st        d«      ‚|�tQ        |«      st        d«      ‚| j                  jR                  | _*        g | _+        i | _,        i | _-        || _.        |xs t_        | jH                  «      | _0        tc        | jH                  «      D ]  }| je                  |«       Œ | jg                  | «      | _4        |r| jh                  jk                  «        | jm                  | j                  | jn                  | jp                  | jV                  | j                  «      | _9        |r| jr                  jk                  «        d | _:        | j<                  r…| jw                  | jV                  | j                  | j                  | j                  «      | _<        t{        «       | _>        d| _?        | j�                  «        |s1| jx                  j‚                  | _:        nd | _<        d| _?        d | _>        | j…                  «       | _C        | j†                  j‚                  | _D        |r| j†                  jk                  «        t‹        | | jŒ                  | j                  | jŽ                  | jp                  | jV                  | jh                  | jr                  | j†                  | j                  | jx                  | j‘                  «       f
d¬«      | _I        y )Nr]  ÚmaxtasksperchildrK   r“  Úlost_worker_timeoutr—   Úmax_restartsÚmax_restart_freqz( must be an int or float, not bool (got ú)r   z&Number of processes must be at least 1z/maxtasksperchild must be a positive int or NoneúWSoft timeouts are not supported: on this platform: It does not have the SIGUSR1 signal.éd   zinitializer must be a callablez on_process_exit must be callableFé   )r:   Úexitpriority)Jrå   ÚboolÚ	TypeErrorÚ
ValueErrorr“   r   Ú_ctxÚsynackÚ_setup_queuesr   Ú
_taskqueueÚ_cacher(  r)  rK   r“  Ú_maxtasksperchildÚ_max_memory_per_childÚ_initializerÚ	_initargsÚ_on_process_exitÚLOST_WORKER_TIMEOUTrË  Úon_process_upÚon_process_downÚon_timeout_setÚon_timeout_cancelÚthreadsÚreadersÚallow_restartÚenable_timeoutsr  ÚwarningsÚwarnÚUserWarningr   rC  ÚroundrÌ  r   ÚcallableÚProcessÚ_ProcessÚ_poolÚ	_poolctrlÚ_on_ready_countersÚputlocksrN   Ú_putlockrù   Ú_create_worker_processr>  Ú_worker_handlerr2  rG  r¬   Ú	_outqueueÚ_task_handlerr¢  r[  Ú_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)rT   r]  r”   r•   rÊ  rK   r“  rË  rÌ  rÍ  rá  râ  rã  rä  rå  Ú	semaphoreró  rç  r×  Úon_process_exitÚcontextr—   rè  rE   Únamer[   rÜ   s                              r4   rY   zPool.__init__  sj  € ð* ˜)Ð$ØÐ!1Ð2Ø˜Ð Ø˜\Ð*Ø"Ð$7Ð8Ø#Ð%9Ð:Ø˜\Ð*ØÐ!1Ð2ð	
ò 	‰KˆD�%ô ˜%¤Õ&ÜØ�fÐDÀUÀIÈQÐOóð ð	ð Ð  Y°¢]ÜÐEÓFÐFØÐ'ÜÐ/´Ô5Ð9IÈAÒ9MÜÐNÓOÐOàÒ,œ{›}ˆŒ	ØˆŒØ×ÑÔÜ›'ˆŒØˆŒÜˆŒØˆŒØ(ˆÔØ!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ï  )rT   r:   Úkwdss      r4   rî  zPool.Process—  s   € Øˆt�}‰}˜dÐ+ dÑ+Ð+r<   c                 óD   — |j                  | j                  |¬«      «      S )N)Útarget)r    rî  rƒ  s     r4   ÚWorkerProcesszPool.WorkerProcessš  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ò  )rT   Úextra_kwargss     r4   rþ  zPool.create_result_handler�  su   € Ø!ˆt×!Ñ!Ø�N‰N˜DŸO™O¨T¯[©[Ø×Ñ˜t×8Ñ8Ø�M‰M˜4×-Ñ-¨t×/BÑ/BØ×Ññ	
ð 26×1HÑ1Hð	
ð
 ñ
ð 	
r<   c                  ó   — y r/   rw   )rT   rï   rÜ   r°   r¤   s        r4   r£  zPool.on_job_ready¦  rÒ   r<   c                 óH   — | j                   | j                  | j                  fS r/   )r  rø  rð  rS   s    r4   r  zPool._help_stuff_finish_args©  s   € Ø�}‰}˜d×0Ñ0°$·*±*Ð<Ð<r<   c                 ó6   — 	 t        «       S # t        $ r Y yw xY wrP   )r   ÚNotImplementedErrorrS   s    r4   r   zPool.cpu_count¬  s!   € ð	Ü“;ÐøÜ"ò 	Ùð	ús   ‚	 Œ	—c                 ó4   —  | j                   j                  |Ž S r/   )rÿ  r›  rš  s     r4   r   zPool.handle_result_event²  s   € Ø0ˆt×#Ñ#×0Ñ0°$Ð7Ð7r<   c                  ó   — y r/   rw   )rT   r„  Úqueuess      r4   Ú_process_register_queueszPool._process_register_queuesµ  rÒ   r<   c                 óT   ‡— t        ˆfd„t        | j                  «      D «       d«      S )Nc              3   óJ   •K  — | ]  \  }}|j                   ‰k(  r||f–— Œ y ­wr/   r¹   rc  s      €r4   rf  z'Pool._process_by_pid.<locals>.<genexpr>¹  rg  rh  ri  )rj  rO  rð  rÑ   s    `r4   rk  zPool._process_by_pid¸  s+   ø€ Üó 
Ü%.¨t¯z©zÓ%:ô
ð óð 	r<   c                 ó4   — | j                   | j                  d fS r/   )r  r÷  rS   s    r4   Úget_process_queueszPool.get_process_queues¾  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  r  Úreplacer+  Úindexr2  rñ  rº   rò  rá  )rT   rÜ   r¡   r›   rœ   r�   rŸ   Úws           r4   rõ  zPool._create_worker_processÁ  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/   rw   rƒ  s     r4   Ú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/   rw   )rd  rº   Úall_pidsÚcleaneds     €€r4   rf  z,Pool._join_exited_workers.<locals>.<genexpr>  s&   øè ø€ ò ?˜SØ˜w™¨#°XÑ*=ô ñ ?ùs   ƒÚ_job_terminated)&r7   rÚ  Úvaluesr  Ú_worker_lostr   Ú_lost_worker_timeoutÚmark_as_worker_lostrÄ  rð  r‰   Úreversedrù   rÏ   r€  r"   r6  rº   r,   rë   ÚgetattrrC   r  r   r(  rñ  rò  rj  r¯  Úon_job_process_downr  Ú_set_terminatedÚon_job_process_lostÚ	_write_toÚ_scheduled_forÚ	_is_aliverâ  Ú_process_cleanup_queues)rT   rÁ  rí   rï   Ú	lost_timeÚlost_retÚ	exitcodesrÜ   r„  rÏ   Úpopenr&  Úacked_by_gonere  Úwrite_toÚ	sched_forr,  r-  s                   @@r4   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/   rw   )rT   rï   r„  s      r4   Úon_partial_readzPool.on_partial_read1  rÒ   r<   c                  ó   — y r/   rw   rƒ  s     r4   r;  zPool._process_cleanup_queues4  rÒ   r<   c                  ó   — y r/   rw   )rT   rï   Úpid_gones      r4   r5  zPool.on_job_process_down7  rÒ   r<   c                 ó&   — t        «       |f|_        y r/   )r   r0  )rT   rï   rº   rÏ   s       r4   r7  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   rx  rP  r   )rT   rï   rÏ   s      r4   r2  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/   rw   rS   s    r4   Ú	__enter__zPool.__enter__H  ó   € Øˆr<   c                 ó"   — | j                  «       S r/   )r:  )rT   r¼   s     r4   Ú__exit__zPool.__exit__K  s   € Ø�~‰~ÓÐr<   c                  ó   — y r/   rw   ©rT   Úns     r4   Úon_growzPool.on_growN  rÒ   r<   c                  ó   — y r/   rw   rP  s     r4   Ú	on_shrinkzPool.on_shrinkQ  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!)rO  Ú_iterinactiverC  rô  rU   Úterminate_controlledrT  rÕ  )rT   rQ  rÜ   r„  s       r4   rU   zPool.shrinkT  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 rP   )rù   rC  rô  ra   rR  )rT   rQ  rÜ   s      r4   ra   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     r4   rV  zPool._iterinactiveg  s,   è ø€ Ø—j‘jò 	ˆFØ×&Ñ& vÕ.Ø“ñ	ùs   ‚!+¤+c                 ó~   — | j                   j                  «       D ]   }|j                  |j                  «       v sŒ  y y)NTF)rÚ  r/  rº   r¯  )rT   r„  rï   s      r4   rZ  zPool._worker_activel  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ù   rC  rÄ  rð  r)  r(  r,   rë   r   ÚstepÚ
IndexErrorrõ  Ú_avail_indexr"   )rT   r>  rÜ   s      r4   Ú_repopulate_poolzPool._repopulate_poolr  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%  )rd  rX  s     r4   rf  z$Pool._avail_index.<locals>.<genexpr>ƒ  s   è ø€ Ò2 !�a—g•gÑ2ùs   ‚c              3   ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wr/   rw   )rd  rÜ   Úindicess     €r4   rf  z$Pool._avail_index.<locals>.<genexpr>„  s   øè ø€ ÒJ˜!¸À'Ò9I”AÑJùrŠ  )rÄ  rð  rC  r‹  rj  rù   )rT   rd  s    @r4   r_  zPool._avail_index�  sK   ø€ Ü�4—:‘:‹ §¡Ò0Ð0Ð0ÜÑ2 t§z¡zÔ2Ó2ˆÜÓJœu T§_¡_Ó5ÔJÓJÐJr<   c                 ó$   — | j                  «        S r/   )r  rS   s    r4   Údid_start_okzPool.did_start_ok†  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  r`  rù   rÄ  rô  rf   )rT   ÚjoinedrÜ   s      r4   rD  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(  rD  r   r   r6  rq  r   r  ÚENOMEMÚMemoryErrorr/  s     r4   Úmaintain_poolzPool.maintain_pool’  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®   ©rK   rT   s    €r4   r  z(Pool._setup_queues.<locals>._poll_result¥  s0   ø€ Ø�~‰~×%Ñ%×*Ñ*¨7Ô3Ø˜TŸ_™_Ó.Ð.Ð.Ør<   )rÖ  ÚSimpleQueuer  r÷  r£   r«   r¬   r¥   r­   r®   r  ©rT   r  s   ` r4   rØ  zPool._setup_queuesŸ  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ü  r2  rS   s    r4   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  )rT   Úfuncr:   r
  s       r4   Úapplyz
Pool.apply´  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  ©rT   ru  ÚiterableÚ	chunksizes       r4   r?   zPool.starmap»  s7   € ð �;‰;œ#ÒØ—?‘? 4¨Ü#.°	ó;ß;>¹3»5ðAð r<   c                 ó^   — | j                   t        k(  r| j                  ||t        |||«      S y)z=
        Asynchronous version of `starmap()` method.
        N)r)  r(  rx  r@   ©rT   ru  rz  r{  ÚcallbackÚerror_callbacks         r4   Ústarmap_asynczPool.starmap_asyncÅ  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  ry  s       r4   r8   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ã   rx  ©rd  rÜ   Úxru  rÔ   s      €€r4   rf  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ã   rx  r;   ©rd  rÜ   rˆ  rÔ   s      €r4   rf  zPool.imap.<locals>.<genexpr>ì  ó3   øè ø€ ò 6Ù�Q˜ô ˜Ÿ™ a¬°1°$¸Ð;Ô<ñ 6ùó   ƒ),c              3   ó.   K  — | ]  }|D ]  }|–— Œ Œ y ­wr/   rw   ©rd  Úchunkr±  s      r4   rf  zPool.imap.<locals>.<genexpr>ð  ó   è ø€ Ò?˜U¸Ò?°”DÐ?�DÑ?ùó   ‚)r)  r(  rË  ÚIMapIteratorrÚ  rÙ  rË   rO  Ú_set_lengthrÈ  Ú
_get_tasks©rT   ru  rz  r{  rË  Útask_batchesrÔ   s    `    @r4   Ú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      €€r4   rf  z&Pool.imap_unordered.<locals>.<genexpr>ÿ  r‰  rŠ  c              3   ó\   •K  — | ]#  \  }}t         ‰j                  |t        |fi ff–— Œ% y ­wr/   rŒ  r�  s      €r4   rf  z&Pool.imap_unordered.<locals>.<genexpr>  rŽ  r�  c              3   ó.   K  — | ]  }|D ]  }|–— Œ Œ y ­wr/   rw   r‘  s      r4   rf  z&Pool.imap_unordered.<locals>.<genexpr>  r“  r”  )r)  r(  rË  ÚIMapUnorderedIteratorrÚ  rÙ  rË   rO  r–  rÈ  r—  r˜  s    `    @r4   Ú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“  rK   rË  r  ré  rê  rë  ró  rô  rR   ÚApplyResultrÚ  rã  rä  r×  r£  rý  rå  rÙ  rË   rã   rx  r¬   )rT   ru  r:   r
  r~  r  Úaccept_callbackÚtimeout_callbackÚwaitforslotr“  rK   rË  r¢  r¤  rÔ   s                  r4   rt  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/   rw   )rT   Úresponserï   rÜ   Úfds        r4   r£  zPool.send_ackI  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  )	rk  r.  r	   r*  r.  rq  r   r  rr  )rT   rº   Úsigre  ró   r|   s         r4   Úterminate_jobzPool.terminate_jobL  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.
        )rx  r;   r}  s         r4   r‚  zPool.map_asyncX  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   ©r  c              3   óT   •K  — | ]  \  }}t         ‰j                  |‰|fi ff–— Œ! y ­wr/   r†  )rd  rÜ   rˆ  ÚmapperrÔ   s      €€r4   rf  z"Pool._map_async.<locals>.<genexpr>u  s5   øè ø€ ò CÙ"& ! Qô  $ f§k¡k°1°f¸q¸dÀBÐ%GÔHñ CùrŠ  )r)  r(  rÿ   r7   ÚdivmodrÄ  rð  rÈ  r—  Ú	MapResultrÚ  rÙ  rË   rO  )
rT   ru  rz  r´  r{  r~  r  Úextrar™  rÔ   s
      `     @r4   rx  zPool._map_asynca  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/   )rN  Útupler>   Úislice)ru  ÚitÚsizerˆ  s       r4   r—  zPool._get_tasksy  s=   è ø€ ä�"‹XˆØÜ”i×&Ñ& r¨4Ó0Ó1ˆAÙØØ˜�)ŠOð	 ùs   ‚68c                 ó   — t        d«      ‚)Nz:pool objects cannot be passed between processes or pickled)r  rS   s    r4   r²   zPool.__reduce__‚  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(  r<  rô  ri   rö  r   rÙ  rË   rL   rS   s    r4   r   z
Pool.close‡  sk   € ÜˆnÔØ�;‰;œ#ÒÜˆDŒKØ�}Š}Ø—‘×#Ñ#Ô%Ø× Ñ ×&Ñ&Ô(Ø�O‰O×Ñ Ô%Ü × 4Ñ 4Õ5ð r<   c                 ó„   — t        d«       t        | _        | j                  j	                  «        | j                  «        y )Nzterminating pool)r"   r9  r)  rö  r:  r  rS   s    r4   r:  zPool.terminate‘  s.   € ÜÐ Ô!ÜˆŒØ×Ñ×&Ñ&Ô(Ø�‰Õr<   c                 ó   — t        | «       y r/   )rL   )Útask_handlers    r4   Ú_stop_task_handlerzPool._stop_task_handler—  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)  r<  r9  r"   rL   rö  rÂ  rø  rÿ  rO  rð  rÄ  r€  r6  )rT   rÜ   rX  s      r4   r6  z	Pool.join›  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‹  )rT   Úes     r4   Ú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"   Ú_rlockrR   Úis_aliver¥   r  r­   rÍ   rÎ   )ÚinqueuerÁ  rð  s      r4   Ú_help_stuff_finishzPool._help_stuff_finish®  sy   € ô 	ÐGÔHØ�‰×ÑÔ Ø×#Ñ#Ô%¨'¯/©/×*>Ñ*>Ô*@Ø�O‰O× Ñ Ô"Ü�J‰J�qŒMð ×#Ñ#Ô%¨'¯/©/×*>Ñ*>Ö*@Ð%Ð*@Ð%r<   c                 ó&   — |j                  d «       y r/   )rË   )ÚclsrJ  r@  s      r4   Ú_set_result_sentinelzPool._set_result_sentinel·  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   r:  zterminating workersrÄ  rÅ  zjoining timeout handlerzjoining pool workerszcleaning up worker %dzpool workers joined)r"   r:  rË   rÍ  rÐ  rÿ   r:  rÂ  rI   ÚTIMEOUT_MAXrË  rº   r€  r6  r   )rÏ  rI  rÌ  rJ  r@  Úworker_handlerrÁ  Úresult_handlerrK  Útimeout_handlerÚhelp_stuff_finish_argsrX  s               r4   r  zPool._terminate_pool»  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ð  r€  r¡   )rT   r&  s     r4   Úprocess_sentinelszPool.process_sentinels÷  s$   € à+/¯:©:Ö6 a�—‘×!Ó!Ò6Ð6ùÒ6s   �/)NNrw   NNNNNr   NNNNTNFFFNNNFrÆ  )r   r/   )NNNrq   )Frr   rs   rt   ru   r"  r�   r>  rG  r[  r�  r   rY   rî  r  rþ  r£  r  r   r   r  rk  r  rõ  r(  r  rD  r;  r5  r7  r2  rK  rN  rR  rT  rU   ra   rV  rZ  r`  r_  rf  rD  rl  rØ  rý  rv  r?   r€  r8   rš  r   rt  r£  r®  r‚  rx  Ústaticmethodr—  r²   r   r:  rÂ  r6  rÈ  rÍ  ÚclassmethodrÐ  r  ÚpropertyrØ  rw   r<   r4   rÈ  rÈ  û  s'  „ ñð €OØ€FØ€JØ€KØ#€NØ!€MØ1ÐàBDØCGØ%)Ø56Ø#Ø!%Ø $Ø#'ØØØØ$ØØ!%ØØ&*Ø!&ó!N
ò`,ò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¥  Nrw   c                 óž  — || _         t        «       | _        t        j                  «       | _        t        t        «      | _        || _	        || _
        || _        || _        || _        || _        || _        || _        |	| _        |
| _        |xs d| _        || _        d| _        d| _        d | _        d | _        d | _        | || j                  <   y )Nrw   F)r¤  rú  Ú_mutexrG   r   Ú_eventrj  Újob_counterrx  rÚ  Ú	_callbackÚ_accept_callbackÚ_error_callbackÚ_timeout_callbackrw  r�  r1  Ú_on_timeout_setÚ_on_timeout_cancelÚ_callbacks_propagateÚ	_send_ackÚ	_acceptedÚ
_cancelledro  rŽ  Ú_terminated)rT   rK  r~  r¦  r§  r  r“  rK   rË  rã  rä  r¢  r£  r¤  s                 r4   rY   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~   rr   rx  ré  r  rS   s    r4   rƒ   zApplyResult.__repr__#  s<   € Ø7×>Ñ>Ø—‘×(Ñ(Ø�y‰y˜dŸn™n°D·J±J³Lð ?ó 
ð 	
r<   c                 ó6   — | j                   j                  «       S r/   )rß  r#  rS   s    r4   r  zApplyResult.ready)  s   € Ø�{‰{×!Ñ!Ó#Ð#r<   c                 ó   — | j                   S r/   )ré  rS   s    r4   ÚacceptedzApplyResult.accepted,  s   € Ø�~‰~Ðr<   c                 ó>   — | j                  «       sJ ‚| j                  S r/   )r  Ú_successrS   s    r4   Ú
successfulzApplyResult.successful/  s   € Ø�z‰zŒ|Ðˆ|Ø�}‰}Ðr<   c                 ó   — d| _         y)zOnly works if synack is used.TN)rê  rS   s    r4   Ú_cancelzApplyResult._cancel3  s	   € àˆ�r<   c                 óP   — | j                   j                  | j                  d «       y r/   )rÚ  Úpoprx  rS   s    r4   ÚdiscardzApplyResult.discard7  s   € Ø�‰�‰˜Ÿ	™	 4Õ(r<   c                 ó   — || _         y r/   )rë  ©rT   r‹   s     r4   r:  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   rP  r   rû  s     r4   r6  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/   ©ro  rS   s    r4   r¯  zApplyResult.worker_pidsC  s   € Ø%)×%5Ò%5�× Ñ Ð!Ð=¸2Ð=r<   c                 ó:   — | j                   j                  |«       y r/   )rß  r�  r7  s     r4   r�  zApplyResult.waitF  s   € Ø�‰×Ñ˜Õ!r<   c                 ó¬   — | j                  |«       | j                  «       st        ‚| j                  r| j                  S | j                  j
                  ‚r/   )r�  r  r   ró  r_   Ú	exceptionr7  s     r4   r  zApplyResult.getI  s>   € Ø�	‰	�'ÔØ�z‰zŒ|ÜÐØ�=Š=Ø—;‘;Ðà—+‘+×'Ñ'Ð'r<   c                 ó”   — |r
	  ||i |¤Ž y y # t         $ r ‚ | j                  $ r ‚ t        $ r}t        d|d¬«       Y d }~y d }~ww xY w)Nz"Pool callback raised exception: %rr   r»   )rk  rç  rÄ   rC   )rT   rð   r:   rE   r|   s        r4   Úsafe_apply_callbackzApplyResult.safe_apply_callbackR  s_   € Ùð"Ù�TÐ$˜VÓ$ð øô ò ØØ×,Ñ,ò ØÜò "ÜÐ:¸CØ ÷"ò "ûð"ús   „ Ž!A¯AÁAc                 óŠ   — | j                   �7| j                  | j                   ||r| j                  n| j                  ¬«       y y )N)rn  rK   )rä  r  r�  rw  )rT   rn  s     r4   rp  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ø  rx  rá  r  rã  ©rT   rÜ   r°   s      r4   rP  zApplyResult._sete  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Ù   rx  rŽ  ro  r  rÚ  rø  rå  r�  rw  rÚ   râ  Ú_propagate_errorsrÄ   )rT   rÜ   r¬  rº   r¨   rª  s         r4   r«  zApplyResult._ackz  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Æ  )rr   rs   rt   r0  r8  r9  rà  rY   rƒ   r  rñ  rô  rö  rù  r:  r6  r¯  r�  r  r  rp  rP  r«  rw   r<   r4   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¥  rY   ró  Ú_lengthr_   ré  ro  rŽ  Ú
_chunksizeÚ_number_leftrß  r‹  rx  rÓ  )rT   rK  r{  Úlengthr~  r  s         r4   rY   zMapResult.__init__�  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ø  rx  rß  r‹  ró  rã  )rT   rÜ   Úsuccess_resultÚsuccessrÔ   s        r4   rP  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é  ro  rŽ  r  rÚ  rø  rx  )rT   rÜ   r¬  rº   r:   r2  rI   Újs           r4   r«  zMapResult._ackÃ  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é  rS   s    r4   rñ  zMapResult.acceptedÍ  s   € Ü�4—>‘>Ó"Ð"r<   c                 óF   — | j                   D �cg c]  }|sŒ|‘Œ	 c}S c c}w r/   rÿ  rÑ   s     r4   r¯  zMapResult.worker_pidsÐ  s   € Ø#×/Ñ/Ö7˜²3’Ò7Ð7ùÒ7s   �—N)rr   rs   rt   rY   rP  r«  rñ  r¯  rw   r<   r4   r¶  r¶  ›  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ý  )rG   Ú	Conditionrú  r^   rj  rà  rx  rÚ  r   Ú_itemsrt  r  Ú_readyÚ	_unsortedÚ_worker_pidsr1  )rT   rK  rË  s      r4   rY   zIMapIterator.__init__Û  sq   € Ü×(Ñ(¬¯©Ó)9Ó:ˆŒ
ÜœÓ%ˆŒ	ØˆŒÜ“gˆŒØˆŒØˆŒØˆŒØˆŒØˆÔØ$7ˆÔ!Øˆˆd�i‰iÒr<   c                 ó   — | S r/   rw   rS   s    r4   Ú__iter__zIMapIterator.__iter__è  rL  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  Úpopleftr^  rt  r  r  r™  r�  r   rÄ   )rT   rK   r±  r  r[   s        r4   rj  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^   rt  r  r#  r  rø  r`   r  r  rÚ  rx  r  s      r4   rP  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  rt  r  r`   rÚ  rx  )rT   r  s     r4   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#  )rT   rÜ   r¬  rº   r:   s        r4   r«  zIMapIterator._ack  s   € Ø×Ñ× Ñ  Õ%r<   c                 ó   — | j                   S r/   )r  rS   s    r4   r  zIMapIterator.ready  s   € Ø�{‰{Ðr<   c                 ó   — | j                   S r/   )r  rS   s    r4   r¯  zIMapIterator.worker_pids"  s   € Ø× Ñ Ð r<   r/   )rr   rs   rt   r0  rà  rY   r!  rj  Ú__next__rP  r–  r«  r  r¯  rw   r<   r4   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#  rt  r`   r  r  rÚ  rx  r  s      r4   rP  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)rr   rs   rt   rP  rw   r<   r4   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È  rY   )rT   r]  r”   r•   s       r4   rY   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    ro  s    €r4   r  z.ThreadPool._setup_queues.<locals>._poll_resultH  s0   ø€ ð#Ø˜TŸ_™_°W˜_Ó=Ð=Ð=øÜò #Ù"ð#ús   ƒ —	#¢#)r   r  r÷  rË   r¬   r  r®   r  rq  s   ` r4   rØ  zThreadPool._setup_queuesB  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Úqueueri   ÚextendrÄ  rc   )rÌ  rÁ  r@  s      r4   rÍ  zThreadPool._help_stuff_finishO  sa   € ð ×Ññ 	+Ø�M‰M×ÑÔ!Ø�M‰M× Ñ  $ ¬#¨d«)Ñ!3Ô4Ø×Ñ×(Ñ(Ô*÷	+÷ 	+ñ 	+ús   �AA3Á3A<)NNrw   )
rr   rs   rt   Údummyrî  r   rY   rØ  rÙ  rÍ  rw   r<   r4   r-  r-  :  s(   „ å.Ø€Gó>ò)ð ñ+ó ñ+r<   r-  r/   )grŒ  r  r>   r¾   rÊ   r  r½   rG   rÍ   ré  Úcollectionsr   Ú	functoolsr   Ú r   r   r   Úcommonr	   r
   r   r   r   r   r   Úcompatr   r   r   rö   r   r5  r   Ú
exceptionsr   r   r   r   r   r   r   r   r3  r   r    r!   r"   r#   ré   Úversion_inforv   ÚsystemÚ_winr&   r.  r‚  r'   rÒ  r0   Ú	SemaphorerX   r(  r<  r9  rÚ   rè   rã   rÙ   rÌ   r,   rÉ   rë   r4  r  rà  rú   rû   Úcountrà  rú  r5   r;   r@   rC   rL   rN   rÄ   ry   r‰   r�   r�   r%  r>  rG  r[  r�  rÈ  r¥  r¶  r•  rŸ  r-  rw   r<   r4   ú<module>rA     sk  ðó Û Û Û 	Û Û Û 
Û Û Û å Ý ç $Ý ÷÷ ñ ÷ 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ô 'ò"÷rñ rôt	&�ô &ôR"(�ô "(ôJH�*ô HôV@�Zô @ôFv'�Jô v'÷r~7ñ ~7÷JTJñ TJôv68�ô 68÷zK!ñ K!ôd	+˜Lô 	+ô +�õ +øðm? ò ØƒKðús   ÃH ÈHÈH