Ë
    òT•j´"  ã                   ó   — d Z dZddlm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	 ej                  «       Zda ej                  «       Zd„ Z ej                   e«        ee	d«      r3 e	j$                  ej&                  ej(                  ej*                  ¬«        G d	„ d
«      Zd„ Z G d„ dej0                  «      Z G d„ dej4                  «      Zy)zImplements ThreadPoolExecutor.z"Brian Quinlan (brian@sweetapp.com)é    )Ú_baseNFc                  óâ   — t         5  dad d d «       t        t        j	                  «       «      } | D ]  \  }}|j                  d «       Œ | D ]  \  }}|j                  «        Œ y # 1 sw Y   Œ\xY w©NT)Ú_global_shutdown_lockÚ	_shutdownÚlistÚ_threads_queuesÚitemsÚputÚjoin)r
   ÚtÚqs      ú0/usr/lib/python3.12/concurrent/futures/thread.pyÚ_python_exitr      sl   € ä	ñ Øˆ	÷ä”×&Ñ&Ó(Ó)€EØò ‰ˆˆ1Ø	�‰ˆd�ðàò ‰ˆˆ1Ø	�‰�ñ÷ð ús   ‡A%Á%A.Úregister_at_fork)ÚbeforeÚafter_in_childÚafter_in_parentc                   ó<   — e Zd Zd„ Zd„ Z eej                  «      Zy)Ú	_WorkItemc                 ó<   — || _         || _        || _        || _        y ©N)ÚfutureÚfnÚargsÚkwargs)Úselfr   r   r   r   s        r   Ú__init__z_WorkItem.__init__/   s   € ØˆŒØˆŒØˆŒ	Øˆ�ó    c                 ó$  — | j                   j                  «       sy 	  | j                  | j                  i | j                  ¤Ž}| j                   j                  |«       y # t        $ r'}| j                   j                  |«       d } Y d }~y d }~ww xY wr   )r   Úset_running_or_notify_cancelr   r   r   Ú
set_resultÚBaseExceptionÚset_exception)r   ÚresultÚexcs      r   Úrunz_WorkItem.run5   st   € Ø�{‰{×7Ñ7Ô9Øð	+Ø�T—W‘W˜dŸi™iÐ7¨4¯;©;Ñ7ˆFð �K‰K×"Ñ" 6Õ*øô ò 	Ø�K‰K×%Ñ% cÔ*à�Dûð	ús   �&A Á	BÁ(B
Â
BN)	Ú__name__Ú
__module__Ú__qualname__r   r'   ÚclassmethodÚtypesÚGenericAliasÚ__class_getitem__© r   r   r   r   .   s   „ òò+ñ $ E×$6Ñ$6Ó7Ñr   r   c                 ó`  — |�	  ||Ž  	 	 	 |j                  «       }|�|j                  «        ~Œ& | «       }t        s|�|j                  r|�d|_        |j                  d «       y ~Œ]# t         $ r= t        j                  j                  dd¬«        | «       }|�|j	                  «        Y y w xY w# t        j                  $ r9  | «       }|�|j                  j                  «        ~|j                  d¬«      }Y Œàw xY w# t         $ r$ t        j                  j                  dd¬«       Y y w xY w)NzException in initializer:T)Úexc_info)ÚblockzException in worker)r#   r   ÚLOGGERÚcriticalÚ_initializer_failedÚ
get_nowaitÚqueueÚEmptyÚ_idle_semaphoreÚreleaseÚgetr'   r   r   )Úexecutor_referenceÚ
work_queueÚinitializerÚinitargsÚexecutorÚ	work_items         r   Ú_workerrB   E   s@  € ØÐð	Ù˜Ñ"ð!DØð7Ø&×1Ñ1Ó3�	ð Ð$Ø—‘”àØá)Ó+ˆHõ
 ˜HÐ,°×0BÒ0Bð Ð'Ø)-�HÔ&à—‘˜tÔ$ØØð= øô ò 	Ü�L‰L×!Ñ!Ð"=ÈÐ!ÔMÙ)Ó+ˆHØÐ#Ø×,Ñ,Ô.Ùð	ûô —;‘;ò 7á-Ó/�ØÐ'Ø×,Ñ,×4Ñ4Ô6ØØ&ŸN™N°˜NÓ6’	ð7ûô8 ò DÜ�‰×ÑÐ3¸dÐÖCðDúsM   „A( ŠD  ŒB1 œA	D  Á&D  Á(AB.Â-B.Â1A	C=Ã:D  Ã<C=Ã=D  Ä *D-Ä,D-c                   ó   — e Zd ZdZy)ÚBrokenThreadPoolzR
    Raised when a worker thread in a ThreadPoolExecutor failed initializing.
    N)r(   r)   r*   Ú__doc__r/   r   r   rD   rD   s   s   „ òr   rD   c                   ó  — e Zd Z ej                  «       j
                  Z	 	 d	d„Zd„ Ze	j                  j                  j                  e_        d„ Zd„ Zd
ddœd„Ze	j                  j                  j                  e_        y)ÚThreadPoolExecutorNc                 óÖ  — |€%t        dt        j                  «       xs ddz   «      }|dk  rt        d«      ‚|�t	        |«      st        d«      ‚|| _        t        j                  «       | _	        t        j                  d«      | _        t        «       | _        d| _        d| _        t        j"                  «       | _        |xs d	| j'                  «       z  | _        || _        || _        y)
a•  Initializes a new ThreadPoolExecutor instance.

        Args:
            max_workers: The maximum number of threads that can be used to
                execute the given calls.
            thread_name_prefix: An optional name prefix to give our threads.
            initializer: A callable used to initialize worker threads.
            initargs: A tuple of arguments to pass to the initializer.
        Né    é   é   r   z"max_workers must be greater than 0zinitializer must be a callableFzThreadPoolExecutor-%d)ÚminÚosÚ	cpu_countÚ
ValueErrorÚcallableÚ	TypeErrorÚ_max_workersr7   ÚSimpleQueueÚ_work_queueÚ	threadingÚ	Semaphorer9   ÚsetÚ_threadsÚ_brokenr   ÚLockÚ_shutdown_lockÚ_counterÚ_thread_name_prefixÚ_initializerÚ	_initargs)r   Úmax_workersÚthread_name_prefixr>   r?   s        r   r   zThreadPoolExecutor.__init__~   sÕ   € ð Ðô ˜b¤2§<¡<£>Ò#6°Q¸!Ñ";Ó<ˆKØ˜!ÒÜÐAÓBÐBàÐ"¬8°KÔ+@ÜÐ<Ó=Ð=à'ˆÔÜ ×,Ñ,Ó.ˆÔÜ(×2Ñ2°1Ó5ˆÔÜ›ˆŒØˆŒØˆŒÜ'Ÿn™nÓ.ˆÔØ$6ò %PØ%<¸t¿}¹}»Ñ%Nð 	Ô à'ˆÔØ!ˆ�r   c                óÀ  — | j                   5  t        5  | j                  rt        | j                  «      ‚| j                  rt        d«      ‚t        rt        d«      ‚t        j                  «       }t        ||||«      }| j                  j                  |«       | j                  «        |cd d d «       cd d d «       S # 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w)Nz*cannot schedule new futures after shutdownz6cannot schedule new futures after interpreter shutdown)r[   r   rY   rD   r   ÚRuntimeErrorr   ÚFuturer   rT   r   Ú_adjust_thread_count)r   r   r   r   ÚfÚws         r   ÚsubmitzThreadPoolExecutor.submit¤   s»   € Ø× Ñ ñ 	Ô"7ñ 	Ø�|Š|Ü& t§|¡|Ó4Ð4à�~Š~Ü"Ð#OÓPÐPÝÜ"ð $:ó ;ð ;ô —‘“ˆAÜ˜!˜R  vÓ.ˆAà×Ñ× Ñ  Ô#Ø×%Ñ%Ô'Ø÷	÷ 	÷ 	ó 	ú÷ 	÷ 	ñ 	ús#   �C”BB?Â,	CÂ?C	ÃCÃCc                 óð  — | j                   j                  d¬«      ry | j                  fd„}t        | j                  «      }|| j
                  k  r¦d| j                  xs | |fz  }t        j                  |t        t        j                  | |«      | j                  | j                  | j                  f¬«      }|j                  «        | j                  j                  |«       | j                  t         |<   y y )Nr   )Útimeoutc                 ó&   — |j                  d «       y r   )r   )Ú_r   s     r   Ú
weakref_cbz;ThreadPoolExecutor._adjust_thread_count.<locals>.weakref_cb¾   s   € Ø�E‰E�$�Kr   z%s_%d)ÚnameÚtargetr   )r9   ÚacquirerT   ÚlenrX   rR   r]   rU   ÚThreadrB   ÚweakrefÚrefr^   r_   ÚstartÚaddr	   )r   rm   Únum_threadsÚthread_namer   s        r   re   z'ThreadPoolExecutor._adjust_thread_count·   sÛ   € à×Ñ×'Ñ'°Ð'Ô2Øð !×,Ñ,ó 	ô ˜$Ÿ-™-Ó(ˆØ˜×*Ñ*Ò*Ø! T×%=Ñ%=Ò%EÀØ%0ð%2ñ 2ˆKä× Ñ  k¼'Ü'.§{¡{°4¸Ó'DØ'+×'7Ñ'7Ø'+×'8Ñ'8Ø'+§~¡~ð'7ô8ˆAð
 �G‰GŒIØ�M‰M×Ñ˜aÔ Ø!%×!1Ñ!1ŒO˜AÒð +r   c                 ó"  — | j                   5  d| _        	 	 | j                  j                  «       }|�.|j                  j                  t        | j                  «      «       ŒL# t        j
                  $ r Y nw xY w	 d d d «       y # 1 sw Y   y xY w)NzBA thread initializer failed, the thread pool is not usable anymore)	r[   rY   rT   r6   r7   r8   r   r$   rD   )r   rA   s     r   r5   z&ThreadPoolExecutor._initializer_failedÎ   s‘   € Ø× Ñ ñ 
	Sð4ˆDŒLð ðØ $× 0Ñ 0× ;Ñ ;Ó =�Ið Ð(Ø×$Ñ$×2Ñ2Ô3CÀDÇLÁLÓ3QÔRð øô —{‘{ò ÙðúØ÷
	S÷ 
	Sñ 
	Sús-   �	B—A"±1BÁ"A8Á5BÁ7A8Á8BÂBF)Úcancel_futuresc                óz  — | j                   5  d| _        |r9	 	 | j                  j                  «       }|�|j                  j                  «        Œ8| j                  j                  d «       d d d «       |r"| j                  D ]  }|j                  «        Œ y y # t        j
                  $ r Y Œ]w xY w# 1 sw Y   ŒGxY wr   )r[   r   rT   r6   r7   r8   r   Úcancelr   rX   r   )r   Úwaitrz   rA   r   s        r   ÚshutdownzThreadPoolExecutor.shutdownÛ   s»   € Ø× Ñ ñ 	'Ø!ˆDŒNÙð ðØ$(×$4Ñ$4×$?Ñ$?Ó$A˜	ð !Ð,Ø!×(Ñ(×/Ñ/Ô1ð ð ×Ñ× Ñ  Ô&÷	'ñ  Ø—]‘]ò �Ø—‘•ñð øô !Ÿ;™;ò Ùðú÷	'ð 	'ús-   �B1™B³8B1ÂB.Â+B1Â-B.Â.B1Â1B:)NÚ Nr/   )T)r(   r)   r*   Ú	itertoolsÚcountÚ__next__r\   r   rh   r   ÚExecutorrE   re   r5   r~   r/   r   r   rG   rG   y   ss   „ ð ˆy�‰Ó ×)Ñ)€Hà<>Ø,.ó$"òLð" —^‘^×*Ñ*×2Ñ2€F„Nò2ò.Sð°Eô ð( —~‘~×.Ñ.×6Ñ6€HÕr   rG   )rE   Ú
__author__Úconcurrent.futuresr   r€   r7   rU   r,   rs   rM   ÚWeakKeyDictionaryr	   r   rZ   r   r   Ú_register_atexitÚhasattrr   rp   Ú_at_fork_reinitr:   r   rB   ÚBrokenExecutorrD   rƒ   rG   r/   r   r   ú<module>r‹      sÑ   ðñ %à1€
å $Û Û Û Û Û Û 	ð ,�'×+Ñ+Ó-€Ø€	ð '˜	Ÿ™Ó(Ð òð €	× Ñ ˜<Ô (ñ ˆ2Ð!Ô"Ø€B×ÑÐ4×<Ñ<Ø'<×'LÑ'LØ(=×(EÑ(EõG÷
8ñ 8ò.+Dô\�u×+Ñ+ô ôv7˜Ÿ™õ v7r   