g-ddlZddlZddlZddlmZddlmZdZGddeZGdd eZ Gd d eZ Gd d eZ Gdde Z GddejZGdde Zej"dk7rGddejZGddejZGddejZGdde ZGdde ZGdd e Zeeed!Zej"d"k(r eed#Zn@eed$Zn4Gd%dejZGd&de Zd#eiZeed#Zd'Zej6Zd(Zd)Zd*Zy)+N)process) reductionc eZdZy) ProcessErrorN__name__ __module__ __qualname__r>/opt/alt/python312/lib64/python3.12/multiprocessing/context.pyrrr rc eZdZy)BufferTooShortNr rr rrrrr rc eZdZy) TimeoutErrorNr rr rrrrr rc eZdZy)AuthenticationErrorNr rr rrrrr rceZdZeZeZeZeZeejZ eejZ eejZ dZ dZ d"dZdZdZd#dZd$d Zd$d Zd Zd%d Zd&d Zd&dZdZ d'dZdZdZdddZdddZdZdZd#dZ dZ!dZ"dZ#d#dZ$d(dZ%d(dZ&e'dZ(e(jRd Z(d!Z*y)) BaseContextcHtj}| td|S)z(Returns the number of CPUs in the systemzcannot determine number of cpus)os cpu_countNotImplementedError)selfnums rrzBaseContext.cpu_count)s#lln ;%&GH HJr c`ddlm}||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) SyncManagerctx)managersr get_contextstart)rrms rManagerzBaseContext.Manager1s( * D,,. /  r Tcddlm}||S)z1Returns two connection object connected by a piper)Pipe) connectionr()rduplexr(s rr(zBaseContext.Pipe<s$F|r c<ddlm}||jS)z#Returns a non-recursive lock objectr)Lockr ) synchronizer,r#)rr,s rr,zBaseContext.LockAs%((*++r c<ddlm}||jS)zReturns a recursive lock objectr)RLockr )r-r/r#)rr/s rr/zBaseContext.RLockF&))+,,r Nc>ddlm}|||jS)zReturns a condition objectr) Conditionr )r-r2r#)rlockr2s rr2zBaseContext.ConditionKs*4#3#3#566r c>ddlm}|||jS)zReturns a semaphore objectr) Semaphorer )r-r5r#)rvaluer5s rr5zBaseContext.SemaphorePs*D$4$4$677r c>ddlm}|||jS)z"Returns a bounded semaphore objectr)BoundedSemaphorer )r-r8r#)rr6r8s rr8zBaseContext.BoundedSemaphoreUs14+;+;+=>>r c<ddlm}||jS)zReturns an event objectr)Eventr )r-r:r#)rr:s rr:zBaseContext.EventZr0r cBddlm}|||||jS)zReturns a barrier objectr)Barrierr )r-r<r#)rpartiesactiontimeoutr<s rr<zBaseContext.Barrier_s(wT5E5E5GHHr c>ddlm}|||jS)Returns a queue objectr)Queuer )queuesrBr#)rmaxsizerBs rrBzBaseContext.Queueds!W$"2"2"455r c>ddlm}|||jS)rAr) JoinableQueuer )rCrFr#)rrDrFs rrFzBaseContext.JoinableQueueis)W$*:*:*<==r c<ddlm}||jS)rAr) SimpleQueuer )rCrHr#)rrHs rrHzBaseContext.SimpleQueuens't//122r cDddlm}||||||jS)zReturns a process pool objectr)Pool)context)poolrJr#)r processes initializerinitargsmaxtasksperchildrJs rrJzBaseContext.Poolss) I{H6F ,,.0 0r c ddlm}||g|S)zReturns a shared objectr)RawValue) sharedctypesrR)rtypecode_or_typeargsrRs rrRzBaseContext.RawValuezs*(0400r c ddlm}|||S)zReturns a shared arrayr)RawArray)rSrW)rrTsize_or_initializerrWs rrWzBaseContext.RawArrays*(*=>>r )r3cDddlm}||g|||jdS)z$Returns a synchronized shared objectr)Valuer3r!)rSrZr#)rrTr3rUrZs rrZzBaseContext.Values/'%--4))+- -r cBddlm}|||||jS)z#Returns a synchronized shared arrayr)Arrayr[)rSr]r#)rrTrXr3r]s rr]zBaseContext.Arrays&'%':))+- -r cjtjdk(r ttddrddlm}|yyy)zCheck whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. win32frozenFr)freeze_supportN)sysplatformgetattrspawnra)rras rrazBaseContext.freeze_supports- <<7 "wsHe'D -  (E "r cddlm}|S)zZReturn package logger -- if it does not already exist then it is created. r) get_logger)utilrg)rrgs rrgzBaseContext.get_loggers %|r cddlm}||S)z8Turn on logging and add a handler which prints to stderrr) log_to_stderr)rhrj)rlevelrjs rrjzBaseContext.log_to_stderrs'U##r cddlm}y)zVInstall support for sending connections and sockets between processes r)r)N)r))rr)s rallow_connection_picklingz%BaseContext.allow_connection_picklings !r c ddlm}||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)rerp)r executablerps rrpzBaseContext.set_executables *z"r c ddlm}||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_namesrss rrsz"BaseContext.set_forkserver_preloads 7|,r cz||S t|}|j|S#t$rtd|zdwxYw)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodr!s rr#zBaseContext.get_contextsU >K N$V,C   N9FBC M Ns !:c|jSN)_namer allow_nones rget_start_methodzBaseContext.get_start_methods zzr ctd)Nz+cannot set start method of concrete context)ryrr{forces rset_start_methodzBaseContext.set_start_methodsFGGr c4tjdS)z_Controls how objects will be reduced to a form that can be shared with other processes.r)globalsgetrs rreducerzBaseContext.reducersy}}[))r c|td<y)Nr)r)rrs rrzBaseContext.reducers!* +r cyr}rrs rrzzBaseContext._check_availables r )Tr})r)NN)r)NNrNF)+r r r rrrr staticmethodrcurrent_processparent_processactive_childrenrr&r(r,r/r2r5r8r:r<rBrFrHrJrRrWrZr]rargrjrnrprsr#rrpropertyrsetterrzrr rrrsL#NL-"7#:#:;O!'"8"89N"7#:#:;O  , - 7 8 ? - I 6 > 3 ?A"01 ? 37- DH- $ !#-H**  ^^++ r rc0eZdZdZedZedZy)ProcessNc\tjjj|Sr})_default_contextr#r_Popen) process_objs rrzProcess._Popens"++-55<<[IIr cZtjjjSr})rr#r _after_forkrr rrzProcess._after_forks ++-55AACCr r r r _start_methodrrrrr rrrs1MJJDDr rc@eZdZeZdZdfd ZddZddZdZxZ S)DefaultContextc ||_d|_yr})r_actual_context)rrKs r__init__zDefaultContext.__init__s '#r cx|)|j|j|_|jSt| |Sr})rrsuperr#)rr{ __class__s rr#zDefaultContext.get_contexts> >##+'+'<'<$'' '7&v. .r cz|j |s td| |rd|_y|j||_y)Nzcontext has already been set)r RuntimeErrorr#rs rrzDefaultContext.set_start_methodsA    +E=> > >e#'D #//7r cn|j|ry|j|_|jjSr})rrr~rs rrzDefaultContext.get_start_methods4    '#'#8#8D ##)))r ctjdk(rdgStjdk(rddgnddg}tjr|j d|S)z=Returns a list of the supported start methods, default first.r_redarwinforkrt)rbrcrHAVE_SEND_HANDLEappend)rmethodss rget_all_start_methodsz$DefaultContext.get_all_start_methodssM <<7 "9 +.<<8+Cw'&RYIZG))|,Nr r}r) r r r rrr#rrr __classcell__)rs@rrrs!G$/8*r rr_c eZdZdZedZy) ForkProcessrcddlm}||SNr)Popen) popen_forkrrrs rrzForkProcess._Popens )% %r Nr r r rrrrr rrrs  &  &r rc0eZdZdZedZedZy) SpawnProcessrecddlm}||Sr)popen_spawn_posixrrs rrzSpawnProcess._Popen 0% %r cyr}rrr rrzSpawnProcess._after_fork# r Nrrr rrr-  &  &    r rc eZdZdZedZy)ForkServerProcessrtcddlm}||Sr)popen_forkserverrrs rrzForkServerProcess._Popen*s /% %r Nrrr rrr(s$  &  &r rceZdZdZeZy) ForkContextrN)r r r r~rrrr rrr/s r rceZdZdZeZy SpawnContextreNr r r r~rrrr rrr3 r rceZdZdZeZdZy)ForkServerContextrtc:tjs tdy)Nz%forkserver start method not available)rrryrs rrzz"ForkServerContext._check_available:s-- !HII.r N)r r r r~rrrzrr rrr7s# Jr r)rrertrrerc0eZdZdZedZedZy)rrecddlm}||Sr)popen_spawn_win32rrs rrzSpawnProcess._PopenNrr cyr}rrr rrzSpawnProcess._after_forkSrr Nrrr rrrLrr ceZdZdZeZyrrrr rrrXrr c(t|t_yr})rwrr)r{s r_force_start_methodres'9&'A$r c$ttddS)Nspawning_popen)rd_tlsrr rget_spawning_popenrns 4)4 00r c|t_yr})rr)popens rset_spawning_popenrqs Dr cZt!tdt|jzy)NzF%s objects should only be shared between processes through inheritance)rrtyper )objs rassert_spawningrts4# #%)#Y%7%7 8 $r ) rrb threadingrmrr__all__ Exceptionrrrrobjectr BaseProcessrrrcrrrrrrrwrrlocalrrrrrr rrs    9  \  <  , x &x |Dg!!D&[&Z<<7&g))& w** &G//&k{JKJ ')  ||x**