
    Rh-                        d dl Z d dlZd dlZddlmZ ddlmZ dZ G d de      Z G d d	e      Z	 G d
 de      Z
 G d de      Z G d de      Z G d dej                        Z G d de      Zej"                  dk7  r G d dej                        Z G d dej                        Z G d dej                        Z G d de      Z G d de      Z G d d e      Z e        e        e       d!Zej"                  d"k(  r eed#         Zn@ eed$         Zn4 G d% dej                        Z G d& de      Zd# e       iZ eed#         Zd' Z ej6                         Zd( Zd) Zd* Zy)+    N   )process)	reduction c                       e Zd Zy)ProcessErrorN__name__
__module____qualname__r       ./usr/lib/python3.12/multiprocessing/context.pyr   r          r   r   c                       e Zd Zy)BufferTooShortNr	   r   r   r   r   r      r   r   r   c                       e Zd Zy)TimeoutErrorNr	   r   r   r   r   r      r   r   r   c                       e Zd Zy)AuthenticationErrorNr	   r   r   r   r   r      r   r   r   c                      e Zd ZeZeZeZeZ eej                        Z	 eej                        Z
 eej                        Zd Zd Zd"dZd Zd Zd#dZd$d	Zd$d
Zd Zd%dZd&dZd&dZd Z	 	 d'dZd Zd ZdddZdddZd Zd Zd#dZ d Z!d Z"d Z#d#dZ$d(dZ%d(dZ&e'd        Z(e(jR                  d         Z(d! Z*y))BaseContextc                 H    t        j                         }|t        d      |S )z(Returns the number of CPUs in the systemzcannot determine number of cpus)os	cpu_countNotImplementedError)selfnums     r   r   zBaseContext.cpu_count)   s#    lln;%&GHHJr   c                 `    ddl m}  || j                               }|j                          |S )zReturns a manager associated with a running server process

        The managers methods such as `Lock()`, `Condition()` and `Queue()`
        can be used to create shared objects.
        r   )SyncManagerctx)managersr   get_contextstart)r   r   ms      r   ManagerzBaseContext.Manager1   s(     	*D,,./		r   Tc                     ddl m}  ||      S )z1Returns two connection object connected by a piper   )Pipe)
connectionr(   )r   duplexr(   s      r   r(   zBaseContext.Pipe<   s    $F|r   c                 <    ddl m}  || j                               S )z#Returns a non-recursive lock objectr   )Lockr    )synchronizer,   r#   )r   r,   s     r   r,   zBaseContext.LockA   s    %((*++r   c                 <    ddl m}  || j                               S )zReturns a recursive lock objectr   )RLockr    )r-   r/   r#   )r   r/   s     r   r/   zBaseContext.RLockF       &))+,,r   Nc                 >    ddl m}  ||| j                               S )zReturns a condition objectr   )	Conditionr    )r-   r2   r#   )r   lockr2   s      r   r2   zBaseContext.ConditionK   s    *4#3#3#566r   c                 >    ddl m}  ||| j                               S )zReturns a semaphore objectr   )	Semaphorer    )r-   r5   r#   )r   valuer5   s      r   r5   zBaseContext.SemaphoreP   s    *D$4$4$677r   c                 >    ddl m}  ||| j                               S )z"Returns a bounded semaphore objectr   )BoundedSemaphorer    )r-   r8   r#   )r   r6   r8   s      r   r8   zBaseContext.BoundedSemaphoreU   s    14+;+;+=>>r   c                 <    ddl m}  || j                               S )zReturns an event objectr   )Eventr    )r-   r:   r#   )r   r:   s     r   r:   zBaseContext.EventZ   r0   r   c                 B    ddl m}  ||||| j                               S )zReturns a barrier objectr   )Barrierr    )r-   r<   r#   )r   partiesactiontimeoutr<   s        r   r<   zBaseContext.Barrier_   s    (wT5E5E5GHHr   c                 >    ddl m}  ||| j                               S )Returns a queue objectr   )Queuer    )queuesrB   r#   )r   maxsizerB   s      r   rB   zBaseContext.Queued   s    !W$"2"2"455r   c                 >    ddl m}  ||| j                               S )rA   r   )JoinableQueuer    )rC   rF   r#   )r   rD   rF   s      r   rF   zBaseContext.JoinableQueuei   s    )W$*:*:*<==r   c                 <    ddl m}  || j                               S )rA   r   )SimpleQueuer    )rC   rH   r#   )r   rH   s     r   rH   zBaseContext.SimpleQueuen   s    't//122r   c                 D    ddl m}  |||||| j                               S )zReturns a process pool objectr   )Pool)context)poolrJ   r#   )r   	processesinitializerinitargsmaxtasksperchildrJ   s         r   rJ   zBaseContext.Pools   s)     	I{H6F ,,.0 	0r   c                      ddl m}  ||g| S )zReturns a shared objectr   )RawValue)sharedctypesrR   )r   typecode_or_typeargsrR   s       r   rR   zBaseContext.RawValuez   s    *(0400r   c                      ddl m}  |||      S )zReturns a shared arrayr   )RawArray)rS   rW   )r   rT   size_or_initializerrW   s       r   rW   zBaseContext.RawArray   s    *(*=>>r   )r3   c                D    ddl m}  ||g||| j                         dS )z$Returns a synchronized shared objectr   )Valuer3   r!   )rS   rZ   r#   )r   rT   r3   rU   rZ   s        r   rZ   zBaseContext.Value   s/    '% - -4))+- 	-r   c                B    ddl m}  ||||| j                               S )z#Returns a synchronized shared arrayr   )Arrayr[   )rS   r]   r#   )r   rT   rX   r3   r]   s        r   r]   zBaseContext.Array   s&    '%':))+- 	-r   c                 j    t         j                  dk(  r t        t         dd      rddlm}  |        yyy)zCheck whether this is a fake forked process in a frozen executable.
        If so then run code specified by commandline and exit.
        win32frozenFr   )freeze_supportN)sysplatformgetattrspawnra   )r   ra   s     r   ra   zBaseContext.freeze_support   s-     <<7"wsHe'D- (E"r   c                     ddl m}  |       S )zZReturn package logger -- if it does not already exist then
        it is created.
        r   )
get_logger)utilrg   )r   rg   s     r   rg   zBaseContext.get_logger   s     	%|r   c                     ddl m}  ||      S )z8Turn on logging and add a handler which prints to stderrr   )log_to_stderr)rh   rj   )r   levelrj   s      r   rj   zBaseContext.log_to_stderr   s    'U##r   c                     ddl m} y)zVInstall support for sending connections and sockets
        between processes
        r   )r)   N) r)   )r   r)   s     r   allow_connection_picklingz%BaseContext.allow_connection_pickling   s     	!r   c                      ddl m}  ||       y)zSets the path to a python.exe or pythonw.exe binary used to run
        child processes instead of sys.executable when using the 'spawn'
        start method.  Useful for people embedding Python.
        r   )set_executableN)re   rp   )r   
executablerp   s      r   rp   zBaseContext.set_executable   s    
 	*z"r   c                      ddl m}  ||       y)zkSet list of module names to try to load in forkserver process.
        This is really just a hint.
        r   )set_forkserver_preloadN)
forkserverrs   )r   module_namesrs   s      r   rs   z"BaseContext.set_forkserver_preload   s     	7|,r   c                 z    || S 	 t         |   }|j                          |S # t        $ r t        d|z        d w xY w)Nzcannot find context for %r)_concrete_contextsKeyError
ValueError_check_available)r   methodr!   s      r   r#   zBaseContext.get_context   sU    >K	N$V,C 	
  	N9FBCM	Ns   	! :c                     | j                   S N)_namer   
allow_nones     r   get_start_methodzBaseContext.get_start_method   s    zzr   c                     t        d      )Nz+cannot set start method of concrete context)ry   r   r{   forces      r   set_start_methodzBaseContext.set_start_method   s    FGGr   c                 4    t               j                  d      S )z_Controls how objects will be reduced to a form that can be
        shared with other processes.r   )globalsgetr   s    r   reducerzBaseContext.reducer   s     y}}[))r   c                     |t               d<   y )Nr   )r   )r   r   s     r   r   zBaseContext.reducer   s    !*	+r   c                      y r}   r   r   s    r   rz   zBaseContext._check_available   s    r   )Tr}   )r   )NN)r   )NNr   NF)+r
   r   r   r   r   r   r   staticmethodr   current_processparent_processactive_childrenr   r&   r(   r,   r/   r2   r5   r8   r:   r<   rB   rF   rH   rJ   rR   rW   rZ   r]   ra   rg   rj   rn   rp   rs   r#   r   r   propertyr   setterrz   r   r   r   r   r      s   L#NL-"7#:#:;O!'"8"89N"7#:#:;O	
,
-
7
8
?
-
I
6
>
3
 ?A"01
?
 37 - DH -$
!#-H * *
 ^^+ +r   r   c                   0    e Zd ZdZed        Zed        Zy)ProcessNc                 \    t         j                         j                  j                  |       S r}   )_default_contextr#   r   _Popen)process_objs    r   r   zProcess._Popen   s"    ++-55<<[IIr   c                  Z    t         j                         j                  j                         S r}   )r   r#   r   _after_forkr   r   r   r   zProcess._after_fork   s     ++-55AACCr   r
   r   r   _start_methodr   r   r   r   r   r   r   r      s1    MJ J D Dr   r   c                   @     e Zd ZeZd Zd fd	ZddZddZd Z xZ	S )DefaultContextc                      || _         d | _        y r}   )r   _actual_context)r   rK   s     r   __init__zDefaultContext.__init__   s     '#r   c                 x    |)| j                   | j                  | _         | j                   S t        |   |      S r}   )r   r   superr#   )r   r{   	__class__s     r   r#   zDefaultContext.get_context   s>    >##+'+'<'<$'''7&v..r   c                 z    | j                   |st        d      |
|rd | _         y | j                  |      | _         y )Nzcontext has already been set)r   RuntimeErrorr#   r   s      r   r   zDefaultContext.set_start_method   sA    +E=>>>e#'D #//7r   c                 n    | j                   |ry | j                  | _         | j                   j                  S r}   )r   r   r~   r   s     r   r   zDefaultContext.get_start_method   s4    '#'#8#8D ##)))r   c                     t         j                  dk(  rdgS t         j                  dk(  rddgnddg}t        j                  r|j	                  d       |S )z=Returns a list of the supported start methods, default first.r_   re   darwinforkrt   )rb   rc   r   HAVE_SEND_HANDLEappend)r   methodss     r   get_all_start_methodsz$DefaultContext.get_all_start_methods  sM    <<7"9+.<<8+Cw'&RYIZG))|,Nr   r}   r   )
r
   r   r   r   r   r#   r   r   r   __classcell__)r   s   @r   r   r      s!    G$/8*r   r   r_   c                        e Zd ZdZed        Zy)ForkProcessr   c                     ddl m}  ||       S Nr   )Popen)
popen_forkr   r   r   s     r   r   zForkProcess._Popen  s    )%%r   Nr
   r   r   r   r   r   r   r   r   r   r     s    		& 
	&r   r   c                   0    e Zd ZdZed        Zed        Zy)SpawnProcessre   c                     ddl m}  ||       S r   )popen_spawn_posixr   r   s     r   r   zSpawnProcess._Popen      0%%r   c                       y r}   r   r   r   r   r   zSpawnProcess._after_fork#       r   Nr   r   r   r   r   r     -    		& 
	& 
	 
	r   r   c                        e Zd ZdZed        Zy)ForkServerProcessrt   c                     ddl m}  ||       S r   )popen_forkserverr   r   s     r   r   zForkServerProcess._Popen*  s    /%%r   Nr   r   r   r   r   r   (  s    $		& 
	&r   r   c                       e Zd ZdZeZy)ForkContextr   N)r
   r   r   r~   r   r   r   r   r   r   r   /  s    r   r   c                       e Zd ZdZeZySpawnContextre   Nr
   r   r   r~   r   r   r   r   r   r   r   3      r   r   c                       e Zd ZdZeZd Zy)ForkServerContextrt   c                 :    t         j                  st        d      y )Nz%forkserver start method not available)r   r   ry   r   s    r   rz   z"ForkServerContext._check_available:  s    -- !HII .r   N)r
   r   r   r~   r   r   rz   r   r   r   r   r   7  s    #	Jr   r   )r   re   rt   r   re   r   c                   0    e Zd ZdZed        Zed        Zy)r   re   c                     ddl m}  ||       S r   )popen_spawn_win32r   r   s     r   r   zSpawnProcess._PopenN  r   r   c                       y r}   r   r   r   r   r   zSpawnProcess._after_forkS  r   r   Nr   r   r   r   r   r   L  r   r   c                       e Zd ZdZeZyr   r   r   r   r   r   r   X  r   r   c                 (    t         |    t        _        y r}   )rw   r   r   )r{   s    r   _force_start_methodr   e  s    '9&'A$r   c                  $    t        t        dd       S )Nspawning_popen)rd   _tlsr   r   r   get_spawning_popenr   n  s    4)400r   c                     | t         _        y r}   )r   r   )popens    r   set_spawning_popenr   q  s
    Dr   c                 Z    t               !t        dt        |       j                  z        y )NzF%s objects should only be shared between processes through inheritance)r   r   typer
   )objs    r   assert_spawningr   t  s4    ##%)#Y%7%78 	 $r   ) r   rb   	threadingrm   r   r   __all__	Exceptionr   r   r   r   objectr   BaseProcessr   r   rc   r   r   r   r   r   r   rw   r   r   localr   r   r   r   r   r   r   <module>r      s   	 
   
	9 		\ 		< 		, 	x& x|Dg!! D&[ &Z <<7&g)) &
w** 
&G// &k { JK J ')
 ||x **<W*EF)*<V*DE
w** 
{ 
 	 &&8&ABB y1 r   