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

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

        Simplified the flow is like this:

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

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