
    Sfb3                        d dl Z d dlZd dlZd dlZddlmZ g ZdZddlm	Z	m
Z
mZmZmZmZmZ  G d d          Z G d d	ej                  Z G d
 de          Z ed  ee          D                       e_        ej        dk    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ed                   Zn> G d dej                  Z G d de          Zd e            iZ eed                   Zd Z ej                     Z!d  Z"d! Z#d" Z$dS )#    N   )processzIforce_execv is not supported as the billiard C extension is not installed)ProcessErrorBufferTooShortTimeoutErrorAuthenticationErrorTimeLimitExceededSoftTimeLimitExceededWorkerLostErrorc                   b   e Zd ZeZeZeZeZeZeZe	Z	 e
ej                  Z e
ej                  Z eed          rd Zn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 Z d Z!d Z"d Z#d(dZ$d Z%d Z&d  Z'd(d!Z(d-d"Z)d(d#Z*d$ Z+d% Z,d& Z-d
S ).BaseContext	cpu_countc                 N    t          j                    }|t          d          |S )z(Returns the number of CPUs in the systemNcannot determine number of cpus)osr   NotImplementedError)selfnums     B/var/www/html/env/lib/python3.11/site-packages/billiard/context.pyr   zBaseContext.cpu_count2   s&    ,..C{)*KLLL
    c                 Z   t           j        dk    r:	 t          t          j        d                   }n# t
          t          f$ r d}Y nw xY wdt           j        v st           j        dk    rxd}t           j        dk    rd|z   }	 t          j        |          5 }t          |                                          }d d d            n# 1 swxY w Y   nG# t
          $ r d}Y n9w xY w	 t          j	        d          }n# t
          t          t          f$ r d}Y nw xY w|d	k    r|S t          d
          )Nwin32NUMBER_OF_PROCESSORSr   bsddarwinz/sbin/sysctl -n hw.ncpuz/usrSC_NPROCESSORS_ONLNr   r   )sysplatformintr   environ
ValueErrorKeyErrorpopenreadsysconfOSErrorAttributeErrorr   )r   r   commps       r   r   zBaseContext.cpu_count:   s   |w&&bj)?@AACC"H-   CCC#,&&#,(*B*B0<8++!D=D$ ,1!!&&((mm, , , , , , , , , , , , , , ,!   CCC*%:;;CC"G^<   CCC axx
)*KLLLsW   2 AAC "C7C CC 
CC CC"C7 7DDc                 v    ddl m}  ||                                           }|                                 |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.ManagerT   sF     	*)))))KD,,..///				r   TFc                 (    ddl m}  ||||          S )z1Returns two connection object connected by a piper   )Pipe)
connectionr4   )r   duplex	rnonblock	wnonblockr4   s        r   r4   zBaseContext.Pipe_   s(    $$$$$$tFIy111r   c                 J    ddl m}  ||                                           S )z#Returns a non-recursive lock objectr   )Lockr,   )synchronizer:   r/   )r   r:   s     r   r:   zBaseContext.Lockd   s3    %%%%%%t((**++++r   c                 J    ddl m}  ||                                           S )zReturns a recursive lock objectr   )RLockr,   )r;   r=   r/   )r   r=   s     r   r=   zBaseContext.RLocki   3    &&&&&&u))++,,,,r   Nc                 L    ddl m}  |||                                           S )zReturns a condition objectr   )	Conditionr,   )r;   r@   r/   )r   lockr@   s      r   r@   zBaseContext.Conditionn   s5    ******y4#3#3#5#56666r   r   c                 L    ddl m}  |||                                           S )zReturns a semaphore objectr   )	Semaphorer,   )r;   rC   r/   )r   valuerC   s      r   rC   zBaseContext.Semaphores   s5    ******yD$4$4$6$67777r   c                 L    ddl m}  |||                                           S )z"Returns a bounded semaphore objectr   )BoundedSemaphorer,   )r;   rF   r/   )r   rD   rF   s      r   rF   zBaseContext.BoundedSemaphorex   s6    1111114+;+;+=+=>>>>r   c                 J    ddl m}  ||                                           S )zReturns an event objectr   )Eventr,   )r;   rH   r/   )r   rH   s     r   rH   zBaseContext.Event}   r>   r   c                 P    ddl m}  |||||                                           S )zReturns a barrier objectr   )Barrierr,   )r;   rJ   r/   )r   partiesactiontimeoutrJ   s        r   rJ   zBaseContext.Barrier   s9    ((((((wwT5E5E5G5GHHHHr   r   c                 L    ddl m}  |||                                           S )Returns a queue objectr   )Queuer,   )queuesrP   r/   )r   maxsizerP   s      r   rP   zBaseContext.Queue   s5    !!!!!!uW$"2"2"4"45555r   c                 L    ddl m}  |||                                           S )rO   r   )JoinableQueuer,   )rQ   rT   r/   )r   rR   rT   s      r   rT   zBaseContext.JoinableQueue   s5    ))))))}W$*:*:*<*<====r   c                 J    ddl m}  ||                                           S )rO   r   )SimpleQueuer,   )rQ   rV   r/   )r   rV   s     r   rV   zBaseContext.SimpleQueue   s3    ''''''{t//112222r    c                 l    ddl m}  ||||||||||	|
||||||||                                           S )zReturns a process pool objectr   )Pool)context)poolrY   r/   )r   	processesinitializerinitargsmaxtasksperchildrM   soft_timeoutlost_worker_timeoutmax_restartsmax_restart_freqon_process_upon_process_downon_timeout_seton_timeout_cancelthreads	semaphoreputlocksallow_restartrY   s                      r   rY   zBaseContext.Pool   sh     	tI{H6F\+> "2M#^5FY- ,,..0 0 0 	0r   c                      ddl m}  ||g|R  S )zReturns a shared objectr   )RawValue)sharedctypesrm   )r   typecode_or_typeargsrm   s       r   rm   zBaseContext.RawValue   s-    ******x(040000r   c                 &    ddl m}  |||          S )zReturns a shared arrayr   )RawArray)rn   rr   )r   ro   size_or_initializerrr   s       r   rr   zBaseContext.RawArray   s(    ******x(*=>>>r   c                 x    ddl m} |                    dd          } ||g|R ||                                 dS )z$Returns a synchronized shared objectr   )ValuerA   TrA   r-   )rn   ru   getr/   )r   ro   rp   kwargsru   rA   s         r   ru   zBaseContext.Value   se    ''''''zz&$''u% - - -4))++- - - 	-r   c                 |    ddl m} |                    dd          } |||||                                           S )z#Returns a synchronized shared arrayr   )ArrayrA   Trv   )rn   rz   rw   r/   )r   ro   rs   rp   rx   rz   rA   s          r   rz   zBaseContext.Array   sW    ''''''zz&$''u%':))++- - - 	-r   c                 z    t           j        dk    r(t          t           dd          rddlm}  |             dS dS dS )zCheck whether this is a fake forked process in a frozen executable.
        If so then run code specified by commandline and exit.
        r   frozenFr   )freeze_supportN)r   r   getattrspawnr}   )r   r}   s     r   r}   zBaseContext.freeze_support   sV     <7""wsHe'D'D"------N #"""r   c                 "    ddl m}  |            S )zZReturn package logger -- if it does not already exist then
        it is created.
        r   )
get_logger)utilr   )r   r   s     r   r   zBaseContext.get_logger   s"     	%$$$$$z||r   c                 $    ddl m}  ||          S )z8Turn on logging and add a handler which prints to stderrr   )log_to_stderr)r   r   )r   levelr   s      r   r   zBaseContext.log_to_stderr   s$    ''''''}U###r   c                     ddl m} dS )zVInstall support for sending connections and sockets
        between processes
        r   )r5   N) r5   )r   r5   s     r   allow_connection_picklingz%BaseContext.allow_connection_pickling   s     	!       r   c                 (    ddl m}  ||           dS )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)r   r   )r   
executabler   s      r   r   zBaseContext.set_executable   s,    
 	*)))))z"""""r   c                 (    ddl m}  ||           dS )zkSet list of module names to try to load in forkserver process.
        This is really just a hint.
        r   )set_forkserver_preloadN)
forkserverr   )r   module_namesr   s      r   r   z"BaseContext.set_forkserver_preload   s-     	766666|,,,,,r   c                     || S 	 t           |         }n # t          $ r t          d|z            w xY w|                                 |S )Nzcannot find context for %r)_concrete_contextsr"   r!   _check_available)r   methodr-   s      r   r/   zBaseContext.get_context   sh    >K	D$V,CC 	D 	D 	D9FBCCC	D
s    1c                     | j         S N)_namer   
allow_nones     r   get_start_methodzBaseContext.get_start_method   s
    zr   c                      t          d          )Nz+cannot set start method of concrete context)r!   )r   r   s     r   set_start_methodzBaseContext.set_start_method   s    FGGGr   c                 6    |                                  pddk    S )Nfork)r   r   s    r   forking_is_enabledzBaseContext.forking_is_enabled   s    %%''16f<<r   c                     |sIddl m} |r|                     dd           d S t          j        t          t                               d S d S )Nr   )supports_execr   T)force)_extr   r   warningswarnRuntimeWarning
W_NO_EXECV)r   rD   r   s      r   forking_enablezBaseContext.forking_enable   sk     	:++++++ :%%gT%:::::nZ8899999	: 	:r   c                     d S r   rW   r   s    r   r   zBaseContext._check_available  s    r   )TFFr   )r   )NN)r   )NNrW   NNNNNr   NNNNTNFFF).__name__
__module____qualname__r   r   r   r   r	   r
   r   staticmethodr   current_processactive_childrenhasattrr   r   r2   r4   r:   r=   r@   rC   rF   rH   rJ   rP   rT   rV   rY   rm   rr   ru   rz   r}   r   r   r   r   r   r/   r   r   r   r   r   rW   r   r   r   r   $   s       L#NL-)1%O"l7#:;;O"l7#:;;Owr; !M	 	 	 		M 	M 	M4	 	 	2 2 2 2
, , ,
- - -
7 7 7 7
8 8 8 8
? ? ? ?
- - -
I I I I
6 6 6 6
> > > >
3 3 3
 ?A?C48EIBF;@0 0 0 01 1 1
? ? ?
- - -- - -    $ $ $ $
! ! !# # #- - -      H H H H= = =: : :    r   r   c                   (    e Zd ZdZed             ZdS )ProcessNc                 d    t                                           j                            |           S r   )_default_contextr/   r   _Popen)process_objs    r   r   zProcess._Popen  s%    ++--5<<[IIIr   r   r   r   _start_methodr   r   rW   r   r   r   r     s7        MJ J \J J J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 | _        d S r   )r   _actual_context)r   rZ   s     r   __init__zDefaultContext.__init__  s     '#r   Nc                     || j         | j        | _         | j         S t          t          |                               |          S r   )r   r   superr   r/   )r   r   	__class__s     r   r/   zDefaultContext.get_context  sC    >#+'+'<$''..::6BBBr   Fc                     | j         |st          d          ||r	d | _         d S |                     |          | _         d S )Nzcontext has already been set)r   RuntimeErrorr/   )r   r   r   s      r   r   zDefaultContext.set_start_method$  sQ    +E+=>>>>e>#'D F#//77r   c                 H    | j         |rd S | j        | _         | j         j        S r   )r   r   r   r   s     r   r   zDefaultContext.get_start_method,  s/    ' t#'#8D #))r   c                 R    t           j        dk    rdgS ddlm} |j        rg dS ddgS )Nr   r   r   	reductionr   r   r   r   )r   r   r   r   HAVE_SEND_HANDLEr   r   s     r   get_all_start_methodsz$DefaultContext.get_all_start_methods3  sK    <7""9######) )6666((r   r   r   )
r   r   r   r   r   r/   r   r   r   __classcell__)r   s   @r   r   r     s        G$ $ $C C C C C C8 8 8 8* * * *) ) ) ) ) ) )r   r   c              #   2   K   | ]}|d          dk    |V  dS )r   _NrW   ).0xs     r   	<genexpr>r   =  s*      LLA!aLLr   r   c                   (    e Zd ZdZed             ZdS )ForkProcessr   c                 $    ddl m}  ||           S Nr   )Popen)
popen_forkr   r   r   s     r   r   zForkProcess._PopenH  s$    ))))))5%%%r   Nr   rW   r   r   r   r   E  s2        		& 	& 
	& 	& 	&r   r   c                   (    e Zd ZdZed             ZdS )SpawnProcessr   c                 $    ddl m}  ||           S r   )popen_spawn_posixr   r   s     r   r   zSpawnProcess._PopenP  $    0000005%%%r   Nr   rW   r   r   r   r   M  2        		& 	& 
	& 	& 	&r   r   c                   (    e Zd ZdZed             ZdS )ForkServerProcessr   c                 $    ddl m}  ||           S r   )popen_forkserverr   r   s     r   r   zForkServerProcess._PopenX  s$    //////5%%%r   Nr   rW   r   r   r   r   U  s2        $		& 	& 
	& 	& 	&r   r   c                       e Zd ZdZeZdS )ForkContextr   N)r   r   r   r   r   r   rW   r   r   r   r   ]  s        r   r   c                       e Zd ZdZeZdS SpawnContextr   Nr   r   r   r   r   r   rW   r   r   r   r   a          r   r   c                       e Zd ZdZeZd ZdS )ForkServerContextr   c                 >    ddl m} |j        st          d          d S )Nr   r   z%forkserver start method not available)r   r   r   r!   r   s     r   r   z"ForkServerContext._check_availablei  s;    ######- J !HIIIJ Jr   N)r   r   r   r   r   r   r   rW   r   r   r   r   e  s2        #	J 	J 	J 	J 	Jr   r   r   r   c                   (    e Zd ZdZed             ZdS )r   r   c                 $    ddl m}  ||           S r   )popen_spawn_win32r   r   s     r   r   zSpawnProcess._Popenz  r   r   Nr   rW   r   r   r   r   w  r   r   c                       e Zd ZdZeZdS r   r   rW   r   r   r   r     r   r   r   c                 4    t           |          t          _        d S r   )r   r   r   )r   s    r   _force_start_methodr     s    '9&'A$$$r   c                  .    t          t          dd           S )Nspawning_popen)r~   _tlsrW   r   r   get_spawning_popenr     s    4)4000r   c                     | t           _        d S r   )r   r   )r#   s    r   set_spawning_popenr     s    Dr   c                 j    t                      $t          dt          |           j        z            d S )NzF%s objects should only be shared between processes through inheritance)r   r   typer   )objs    r   assert_spawningr     s>    ##%)#YY%78
 
 	
 $#r   )%r   r   	threadingr   r   r   __all__r   
exceptionsr   r   r   r   r	   r
   r   r   BaseProcessr   r   listdirr   r   r   r   r   r   r   r   r   r   localr   r   r   r   rW   r   r   <module>r     s   				 



           

                 b b b b b b b bRJ J J J Jg! J J J&) &) &) &) &)[ &) &) &)P LL^)<)<LLLLL  <7& & & & &g) & & && & & & &w* & & && & & & &G/ & & &    k       {   J J J J JK J J J '')) 
 &~&8&@AA& & & & &w* & & &    {   
 	 &~&8&ABBB B B y1 1 1     
 
 
 
 
r   