
    4bh                         	 d Z ddlZddlmZ ddlZddlZddlZddlm	Z	 ddl
Z
ddlZddlmZ ddlZddlZddlmZ  ej$                         Zda G d d	      Zd
 Z e
j.                  e       dZdZ G d de      Z G d d      Zd Z G d de      Z G d de      Z  G d de      Z! G d de	      Z"d Z#d Z$	 	 d&dZ%d'dZ& G d de
jN                        Z(da)da*d  Z+d! Z, G d" d#ejZ                        Z. G d$ d%ej^                        Z0y)(z"Brian Quinlan (brian@sweetapp.com)    N)_base)Queue)partial)format_exceptionFc                   $    e Zd Zd Zd Zd Zd Zy)_ThreadWakeupc                     d| _         t        j                         | _        t	        j
                  d      \  | _        | _        y )NF)duplex)_closed	threadingLock_lockmpPipe_reader_writerselfs    D/opt/python-3.12.12/usr/lib/python3.12/concurrent/futures/process.py__init__z_ThreadWakeup.__init__E   s.    ^^%
%'WWE%:"dl    c                     | j                   5  | j                  s;d| _        | j                  j                          | j                  j                          d d d        y # 1 sw Y   y xY wNT)r   r   r   closer   r   s    r   r   z_ThreadWakeup.closeJ   sC     ZZ<<#""$""$	 ZZs   AAA'c                     | j                   5  | j                  s| j                  j                  d       d d d        y # 1 sw Y   y xY w)Nr   )r   r   r   
send_bytesr   s    r   wakeupz_ThreadWakeup.wakeupV   s,    ZZ<<'', ZZs	   (>Ac                     | j                   rt        d      | j                  j                         r6| j                  j	                          | j                  j                         r5y y )Nz!operation on closed _ThreadWakeup)r   RuntimeErrorr   poll
recv_bytesr   s    r   clearz_ThreadWakeup.clear[   sG    <<BCCll!LL##% ll!r   N)__name__
__module____qualname__r   r   r   r"    r   r   r   r   D   s    ;

%-
&r   r   c                      da t        t        j                               } | D ]  \  }}|j	                           | D ]  \  }}|j                           y r   )_global_shutdownlist_threads_wakeupsitemsr   join)r+   _thread_wakeupts       r   _python_exitr0   b   sP    !'')*E!= " 1	 r      =   c                       e Zd Zd Zd Zy)_RemoteTracebackc                     || _         y Ntb)r   r8   s     r   r   z_RemoteTraceback.__init__   s	    r   c                     | j                   S r6   r7   r   s    r   __str__z_RemoteTraceback.__str__   s    wwr   N)r#   r$   r%   r   r:   r&   r   r   r4   r4      s    r   r4   c                       e Zd Zd Zd Zy)_ExceptionWithTracebackc                     dj                  t        t        |      ||            }|| _        d | j                  _        d|z  | _        y )N z

"""
%s""")r,   r   typeexc__traceback__r8   )r   r@   r8   s      r   r   z _ExceptionWithTraceback.__init__   s?    WW%d3ib9: "& 2%r   c                 >    t         | j                  | j                  ffS r6   )_rebuild_excr@   r8   r   s    r   
__reduce__z"_ExceptionWithTraceback.__reduce__   s    dhh000r   N)r#   r$   r%   r   rD   r&   r   r   r<   r<      s    &1r   r<   c                 &    t        |      | _        | S r6   )r4   	__cause__)r@   r8   s     r   rC   rC      s    $R(CMJr   c                       e Zd Zd Zy)	_WorkItemc                 <    || _         || _        || _        || _        y r6   )futurefnargskwargs)r   rJ   rK   rL   rM   s        r   r   z_WorkItem.__init__   s    	r   Nr#   r$   r%   r   r&   r   r   rH   rH          r   rH   c                       e Zd ZddZy)_ResultItemNc                 <    || _         || _        || _        || _        y r6   )work_id	exceptionresultexit_pid)r   rS   rT   rU   rV   s        r   r   z_ResultItem.__init__   s    " r   NNNrN   r&   r   r   rQ   rQ      s    !r   rQ   c                       e Zd Zd Zy)	_CallItemc                 <    || _         || _        || _        || _        y r6   )rS   rK   rL   rM   )r   rS   rK   rL   rM   s        r   r   z_CallItem.__init__   s    	r   NrN   r&   r   r   rY   rY      rO   r   rY   c                   ,     e Zd Z	 d fd	Z fdZ xZS )
_SafeQueuec                D    || _         || _        t        |   ||       y )N)ctx)pending_work_itemsr.   superr   )r   max_sizer^   r_   r.   	__class__s        r   r   z_SafeQueue.__init__   s%    "4*s+r   c                    t        |t              rt        t        |      ||j                        }t        dj                  dj                  |                  |_        | j                  j                  |j                  d       }| j                  j                          ||j                  j                  |       y y t         | E  ||       y )Nz

"""
{}"""r>   )
isinstancerY   r   r?   rA   r4   formatr,   rF   r_   poprS   r.   r   rJ   set_exceptionr`   _on_queue_feeder_error)r   eobjr8   	work_itemrb   s        r   rh   z!_SafeQueue._on_queue_feeder_error   s    c9%!$q'1aoo>B*>+@+@+MNAK//33CKKFI%%' $  ..q1 % G*1c2r   )r   )r#   r$   r%   r   rh   __classcell__rb   s   @r   r\   r\      s    G,
3 3r   r\   c              '   l   K   	 t        | }	 t        t        j                  ||             }|sy | 'wr6   )ziptuple	itertoolsislice)	chunksize	iterablesitchunks       r   _get_chunksrw      s<     6	iB
i&&r956	 s   24c                 4    	 |D cg c]  } | | 	 c}S c c}w r6   r&   )rK   rv   rL   s      r   _process_chunkry      s%     #((%$BI%(((s   c                     	 	 | j                  t        ||||             y # t        $ r=}t        ||j                        }| j                  t        |||             Y d }~y d }~ww xY w)N)rU   rT   rV   rT   rV   )putrQ   BaseExceptionr<   rA   )result_queuerS   rU   rT   rV   ri   r@   s          r   _sendback_resultr      sk    89WV/88M 	N 9%a9W.68 	9 	99s   " 	A(3A##A(c                 D   	 |	  ||  d}d }	 | j	                  d      }|$|j                  t        j                                y ||dz  }||k\  rt        j                         }	  |j                  |j                  i |j                  }t        ||j                  ||       ~~|y # t         $ r$ t        j                  j                  dd       Y y w xY w# t         $ r9}	t        |	|	j                        }
t        ||j                  |
|       Y d }	~	rd }	~	ww xY w)	NzException in initializer:T)exc_infor   blockr1   )rU   rV   r{   )r}   r   LOGGERcriticalgetr|   osgetpidrK   rL   rM   r   rS   r<   rA   )
call_queuer~   initializerinitargs	max_tasks	num_tasksrV   	call_itemrri   r@   s              r   _process_workerr      s8    	" IH
NNN.	RYY[) NII%99;			innA	0@0@AA \9+<+<Q&.0 9   	LL!!"=!M 		*  	0)!Q__=C\9+<+<&.0 0	0s)   B- (&C -*CC	D&/DDc                   j     e Zd Z	  f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 xZS )_ExecutorManagerThreadc                    |j                   | _        |j                  | _        | j                  fd}t	        j
                  ||      | _        |j                  | _        |j                  | _
        |j                  | _        |j                  | _        |j                  | _        |j"                  | _        t&        | Q          y )Nc                 b    t         j                  j                  d       |j                          y )Nz?Executor collected: triggering callback for QueueManager wakeup)r   utildebugr   )r-   r.   s     r   
weakref_cbz3_ExecutorManagerThread.__init__.<locals>.weakref_cb4  s#    GGMM 1 2  "r   )_executor_manager_thread_wakeupr.   _shutdown_lockshutdown_lockweakrefrefexecutor_reference
_processes	processes_call_queuer   _result_queuer~   	_work_idswork_ids_queue_max_tasks_per_childmax_tasks_per_child_pending_work_itemsr_   r`   r   )r   executorr   rb   s      r   r   z_ExecutorManagerThread.__init__&  s    
 &EE%44 &*%7%7	# #*++h
"C ",, #.. %22 '00 $,#@#@  #+">">r   c                    	 	 | j                          | j	                         \  }}}|r| j                  |       y || j                  |       |j                  d u}|r5| j                  j                  |j                        }|j                          ~| j                         x}rC|r&| j                  5  |j                          d d d        n|j                  j                          ~| j                         r=| j!                          | j                          | j"                  s| j%                          y 6# t        $ r&}t        |      }| j                  |       Y d }~y d }~ww xY w# 1 sw Y   xY wr6   )add_call_item_to_queuer}   r   terminate_brokenwait_result_broken_or_wakeupprocess_result_itemrV   r   rf   r,   r   r   _adjust_process_count_idle_worker_semaphorereleaseis_shutting_downflag_executor_shutting_downr_   join_executor_internals)r   r@   causeresult_item	is_brokenprocess_exitedpr   s           r   runz_ExecutorManagerThread.runS  sY    ++- -1,M,M,O)KE%%e,&((5!,!5!5T!A!**;+?+?@AFFH  #668888%!//$::< 0/ !77??A $$&002
 ++- ..002_ 
 ! (-%%e,0 0/s#   D8 4E*8	E'E""E'*E3c                    	 | j                   j                         ry 	 | j                  j                  d      }| j                  |   }|j
                  j                         rH| j                   j                  t        ||j                  |j                  |j                        d       n| j                  |= # t        j                  $ r Y y w xY w)NTFr   )r   fullr   r   r_   rJ   set_running_or_notify_cancelr|   rY   rK   rL   rM   queueEmpty)r   rS   rk   s      r   r   z-_ExecutorManagerThread.add_call_item_to_queue  s     ##%--111> !33G<	##@@BOO''	'2;,,2;..2;2B2B)D /3	 ( 4 //8% 
 ;; s   B: :CCc                    | j                   j                  }| j                  j                  }||g}t        | j                  j                               D cg c]  }|j                   }}t        j                  j                  ||z         }d }d}d }	||v r	 |j                         }	d}n||v rd}| j                  j                          |	||fS c c}w # t        $ r}
t        |
      }Y d }
~
=d }
~
ww xY wNTF)r~   r   r.   r)   r   valuessentinelr   
connectionwaitrecvr}   r   r"   )r   result_readerwakeup_readerreadersr   worker_sentinelsreadyr   r   r   r@   s              r   r   z3_ExecutorManagerThread.wait_result_broken_or_wakeup  s     ))11**22 -004T^^5J5J5L0MN0M1AJJ0MN""7-=#=>	E!.+002!	 e#I  "Iu,,% O ! .(-.s   CC 	C3C..C3c                    t        |t              rI| j                  j                  |      }|j	                          | j                  s| j                          y y | j                  j                  |j                  d       }|X|j                  r&|j                  j                  |j                         y |j                  j                  |j                         y y r6   )rd   intr   rf   r,   r   r_   rS   rT   rJ   rg   
set_resultrU   )r   r   r   rk   s       r   r   z*_ExecutorManagerThread.process_result_item  s     k3' "";/AFFH>>,,. "
 //33K4G4GNI$(($$22;3H3HI$$//0B0BC	 %r   c                 V    | j                         }t        xs |d u xs |j                  S r6   )r   r(   _shutdown_thread)r   r   s     r   r   z'_ExecutorManagerThread.is_shutting_down  s4    **,
 ! -H$4 -,,	.r   c                 B   | j                         }|d|_        d|_        d }t        d      }|#t	        ddj                  |       d      |_        | j                  j                         D ]"  \  }}	 |j                  j                  |       ~$ | j                  j                          | j                  j                         D ]  }|j!                           | j"                  j%                          | j'                  d       y # t        j                  $ r Y w xY w)NzKA child process terminated abruptly, the process pool is not usable anymoreTz^A process in the process pool was terminated abruptly while the future was running or pending.z
'''
r>   z''')broken)r   _brokenr   BrokenProcessPoolr4   r,   rF   r_   r+   rJ   rg   r   InvalidStateErrorr"   r   r   	terminater   _terminate_broken_join_executor_internals)r   r   r   bperS   rk   r   s          r   r   z(_ExecutorManagerThread._terminate_broken  s!    **,!1H )-H%H   !6 7 ,"''%.)-/CM #'"9"9"?"?"AGY  ..s3  #B 	%%' &&(AKKM ) 	))+ 	%%T%2% ** 
 s   4DDDc                 h    | j                   5  | j                  |       d d d        y # 1 sw Y   y xY wr6   )r   r   )r   r   s     r   r   z'_ExecutorManagerThread.terminate_broken  s%    ""5)  s   (1c                 d   | j                         }|}d|_        |j                  rii }| j                  j	                         D ]%  \  }}|j
                  j                         r!|||<   ' || _        	 	 | j                  j                          y y y # t        j                  $ r Y nw xY wd|_        $r   )r   r   _cancel_pending_futuresr_   r+   rJ   cancelr   
get_nowaitr   r   )r   r   new_pending_work_itemsrS   rk   s        r   r   z2_ExecutorManagerThread.flag_executor_shutting_down  s     **,(,H%// *,&*.*A*A*G*G*I&GY$++224:C.w7 +J +A' ++668  0    !;;  490s   3B B'&B'c                 ,   | j                         }d}||k  rc| j                         dkD  rOt        ||z
        D ]#  }	 | j                  j                  d        |dz  }% ||k  r| j                         dkD  rMy y y y # t        j
                  $ r Y  3w xY w)Nr   r1   )get_n_children_aliveranger   
put_nowaitr   Full)r   n_children_to_stopn_sentinels_sentis       r   shutdown_workersz'_ExecutorManagerThread.shutdown_workers*  s    !668  "44--/!3-0@@AOO..t4$)$ B  "44--/!3 53 5 zz s    A<<BBc                 f    | j                   5  | j                          d d d        y # 1 sw Y   y xY wr6   )r   r   r   s    r   r   z._ExecutorManagerThread.join_executor_internals8  s#    ))+  s   '0c                 F   |s| j                          | j                  j                          | j                  j                          | j                  j                          | j
                  j                         D ]$  }|r|j                          |j                          & y r6   )	r   r   r   join_threadr.   r   r   r   r,   )r   r   r   s      r   r   z/_ExecutorManagerThread._join_executor_internals<  ss    !!# 	##%  " &&(AFFH )r   c                 V    t        d | j                  j                         D              S )Nc              3   <   K   | ]  }|j                           y wr6   )is_alive).0r   s     r   	<genexpr>z>_ExecutorManagerThread.get_n_children_alive.<locals>.<genexpr>O  s     A)@A1::<)@s   )sumr   r   r   s    r   r   z+_ExecutorManagerThread.get_n_children_aliveM  s     A)>)>)@AAAr   )F)r#   r$   r%   r   r   r   r   r   r   r   r   r   r   r   r   r   rl   rm   s   @r   r   r     sN    	+Z2h.-<D..-3^*94,"Br   r   c                     t         rt        rt        t              da 	 dd l} 	 t        j                  d      }|dk(  ry |dk\  ry d|z  at        t              # t        $ r dat        t              w xY w# t        t        f$ r Y y w xY w)NTr   zxThis Python build lacks multiprocessing.synchronize, usually due to named semaphores being unavailable on this platform.SC_SEM_NSEMS_MAX   z@system provides too few semaphores (%d available, 256 necessary))	_system_limits_checked_system_limitedNotImplementedErrormultiprocessing.synchronizeImportErrorr   sysconfAttributeError
ValueError)multiprocessing	nsems_maxs     r   _check_system_limitsr   V  s    %o66!3*JJ12	 B 	C 	46?@O
o
..+  3F 	 "/223 J' s   A A7 A47B	B	c              #   l   K   	 | D ]*  }|j                          |s|j                          |r, y wr6   )reverserf   )iterableelements     r   _chain_from_iterable_of_listsr  v  s5     
 ++-  s   444c                       e Zd Zy)r   N)r#   r$   r%   r&   r   r   r   r     s    r   r   c                        e Zd Z	 	 ddddZd Zd Zd Zd Zd Ze	j                  j                  j                  e_        dd	d
 fd
ZddddZe	j                  j                  j                  e_         xZS )ProcessPoolExecutorN)r   c                   	 t                |Pt        j                         xs d| _        t        j
                  dk(  ret        t        | j                        | _        nE|dk  rt        d      t        j
                  dk(  r|t        kD  rt        dt               || _        |,|t        j                  d      }nt        j                         }|| _        | j                  j                  d      d	k7  | _        |t        |      st        d
      || _        || _        |Ut%        |t&              st        d      |dk  rt        d      | j                  j                  d      d	k(  rt        d      || _        d | _        i | _        d| _        t1        j2                         | _        t1        j6                  d      | _        d| _        d| _        i | _        d| _         tC               | _"        | j                  tF        z   }tI        || j                  | j>                  | jD                        | _%        d| jJ                  _&        |jO                         | _(        tS        jT                         | _+        y )Nr1   win32r   z"max_workers must be greater than 0zmax_workers must be <= spawnF)
allow_noneforkzinitializer must be a callablez&max_tasks_per_child must be an integerz max_tasks_per_child must be >= 1zpmax_tasks_per_child is incompatible with the 'fork' multiprocessing start method; supply a different mp_context.)ra   r^   r_   r.   T),r   r   	cpu_count_max_workerssysplatformmin_MAX_WINDOWS_WORKERSr   r   get_context_mp_contextget_start_method#_safe_to_dynamically_spawn_childrencallable	TypeError_initializer	_initargsrd   r   r   _executor_manager_threadr   r   r   r   r   	Semaphorer   r   _queue_countr   r   r   r   EXTRA_QUEUED_CALLSr\   r   _ignore_epipeSimpleQueuer   r   r   r   )r   max_workers
mp_contextr   r   r   
queue_sizes          r   r   zProcessPoolExecutor.__init__  s]   	$ 	 " 3!D||w&$'(<(,(9(9%;! a !EFF,,')22 -.B-CDF F !,D".^^G4
^^-
%   11U1CvM 	0 "8K+@<=='!*137 HII$) !CDD00E0BfL  "C D D %8! )-%  !&'nn.&/&9&9!&<##% ',$ 0=, &&);;
%T%5%5#77>>@ *.&'335r   c                     | j                   d| j                  s| j                          t        |       | _         | j                   j	                          | j
                  t        | j                   <   y y r6   )r  r  _launch_processesr   startr   r*   r   s    r   _start_executor_manager_threadz2ProcessPoolExecutor._start_executor_manager_thread  s`    ((0;;&&(,B4,HD)))//144 T::; 1r   c                     | j                   j                  d      ry t        | j                        }|| j                  k  r| j                          y y )NF)blocking)r   acquirelenr   r  _spawn_process)r   process_counts     r   r   z)ProcessPoolExecutor._adjust_process_count   sK    &&...>DOO,4,,, ! -r   c                     t        t        | j                        | j                        D ]  }| j	                           y r6   )r   r*  r   r  r+  )r   r-   s     r   r$  z%ProcessPoolExecutor._launch_processes  s1    
 s4??+T->->?A! @r   c                    | j                   j                  t        | j                  | j                  | j
                  | j                  | j                  f      }|j                          || j                  |j                  <   y )N)targetrL   )r  Processr   r   r   r  r  r   r%  r   pid)r   r   s     r   r+  z"ProcessPoolExecutor._spawn_process  sm    $$"""$$##..++	- % . 	
	!"r   c                R   | j                   5  | j                  rt        | j                        | j                  rt	        d      t
        rt	        d      t        j                         }t        ||||      }|| j                  | j                  <   | j                  j                  | j                         | xj                  dz  c_
        | j                  j                          | j                  r| j!                          | j#                          |cd d d        S # 1 sw Y   y xY w)Nz*cannot schedule new futures after shutdownz6cannot schedule new futures after interpreter shutdownr1   )r   r   r   r   r   r(   r   FuturerH   r   r  r   r|   r   r   r  r   r&  )r   rK   rL   rM   fws         r   submitzProcessPoolExecutor.submit"  s      ||'55$$"#OPP" $: ; ; A!Rv.A:;D$$T%6%67NNt001"0077977**,//1+ !  s   DDD&r1   )timeoutrs   c                    	 |dk  rt        d      t        | 	  t        t        |      t        |d|i|      }t        |      S )Nr1   zchunksize must be >= 1.rs   )r7  )r   r`   mapr   ry   rw   r  )r   rK   r7  rs   rt   resultsrb   s         r   r9  zProcessPoolExecutor.map;  sV    	( q=677'+gnb9)9J	J&-  / -W55r   F)cancel_futuresc                   | j                   5  || _        d| _        | j                  | j                  j	                          d d d        | j
                  |r| j
                  j                          d | _        d | _        | j                  |r| j                  j                          d | _        d | _
        d | _        y # 1 sw Y   }xY wr   )r   r   r   r   r   r  r,   r   r   r   r   )r   r   r;  s      r   shutdownzProcessPoolExecutor.shutdownX  s      +9D($(D!33?44;;= ! ((4))..0 )-%)d$$&!/3,# ! s   5B>>C)NNNr&   )T)r#   r$   r%   r   r&  r   r$  r+  r6  r   Executor__doc__r9  r=  rl   rm   s   @r   r  r    s~    48,.j'GKj'X5""	#. ^^**22FN*.! 6:4E 4( ~~..66Hr   r  rW   r6   )1
__author__r   concurrent.futuresr   r   r   r   multiprocessing.connectionmultiprocessing.queuesr   r   r   	functoolsr   rq   r  	tracebackr   WeakKeyDictionaryr*   r(   r   r0   _register_atexitr  r  	Exceptionr4   r<   rC   objectrH   rQ   rY   r\   rw   ry   r   r   Threadr   r   r   r   r  BrokenExecutorr   r>  r  r&   r   r   <module>rL     s?  (T 2
 	 $   " (     
 & -7,,.  & &< 	  < (    y 	1 	1 !& ! 3 3,	) DH"	93luBY-- uBp	  /@	 ,, c7%.. c7r   