U e5d+@sddlZddlZddlZddlmZddlmZdZGdddeZGdd d eZ Gd d d eZ Gd d d eZ Gddde Z GdddejZGddde ZejdkrRGdddejZGdddejZGdddejZGddde ZGddde ZGdd d e Zeeed!Zejd"krDeed#Zn eed$Zn8Gd%ddejZGd&dde Zd#eiZeed#Zd'd(ZeZd)d*Zd+d,Zd-d.ZdS)/N)process) reductionc@s eZdZdS) ProcessErrorN__name__ __module__ __qualname__rrr//usr/lib64/python3.8/multiprocessing/context.pyrsrc@s eZdZdS)BufferTooShortNrrrrr r sr c@s eZdZdS) TimeoutErrorNrrrrr r sr c@s eZdZdS)AuthenticationErrorNrrrrr rsrc@sXeZdZeZeZeZeZeej Z eej Z eej Z ddZ ddZ dCddZdd Zd d ZdDd dZdEddZdFddZddZdGddZdHddZdIddZddZdJd d!Zd"d#Zd$d%Zdd&d'd(Zdd&d)d*Zd+d,Zd-d.ZdKd/d0Z d1d2Z!d3d4Z"d5d6Z#dLd7d8Z$dMd:d;Z%dNdd?Z(e(j)d@d?Z(dAdBZ*d S)O BaseContextcCs"t}|dkrtdn|SdS)z(Returns the number of CPUs in the systemNzcannot determine number of cpus)os cpu_countNotImplementedError)selfZnumrrr r)s zBaseContext.cpu_countcCs&ddlm}||d}||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)Zmanagersr get_contextstart)rrmrrr Manager1s zBaseContext.ManagerTcCsddlm}||S)z1Returns two connection object connected by a piper)Pipe) connectionr)rZduplexrrrr r<s zBaseContext.PipecCsddlm}||dS)z#Returns a non-recursive lock objectr)Lockr) synchronizerr)rrrrr rAs zBaseContext.LockcCsddlm}||dS)zReturns a recursive lock objectr)RLockr)rrr)rrrrr rFs zBaseContext.RLockNcCsddlm}|||dS)zReturns a condition objectr) Conditionr)rr r)rlockr rrr r Ks zBaseContext.ConditionrcCsddlm}|||dS)zReturns a semaphore objectr) Semaphorer)rr"r)rvaluer"rrr r"Ps zBaseContext.SemaphorecCsddlm}|||dS)z"Returns a bounded semaphore objectr)BoundedSemaphorer)rr$r)rr#r$rrr r$Us zBaseContext.BoundedSemaphorecCsddlm}||dS)zReturns an event objectr)Eventr)rr%r)rr%rrr r%Zs zBaseContext.EventcCs ddlm}|||||dS)zReturns a barrier objectr)Barrierr)rr&r)rZpartiesactionZtimeoutr&rrr r&_s zBaseContext.BarrierrcCsddlm}|||dS)Returns a queue objectr)Queuer)queuesr)r)rmaxsizer)rrr r)ds zBaseContext.QueuecCsddlm}|||dS)r(r) JoinableQueuer)r*r,r)rr+r,rrr r,is zBaseContext.JoinableQueuecCsddlm}||dS)r(r) SimpleQueuer)r*r-r)rr-rrr r-ns zBaseContext.SimpleQueuercCs"ddlm}||||||dS)zReturns a process pool objectr)Pool)context)Zpoolr.r)rZ processesZ initializerZinitargsZmaxtasksperchildr.rrr r.ss  zBaseContext.PoolcGsddlm}||f|S)zReturns a shared objectr)RawValue) sharedctypesr0)rtypecode_or_typeargsr0rrr r0zs zBaseContext.RawValuecCsddlm}|||S)zReturns a shared arrayr)RawArray)r1r4)rr2size_or_initializerr4rrr r4s zBaseContext.RawArray)r!cGs&ddlm}||f|||dS)z$Returns a synchronized shared objectr)Valuer!r)r1r6r)rr2r!r3r6rrr r6s  zBaseContext.ValuecCs ddlm}|||||dS)z#Returns a synchronized shared arrayr)Arrayr7)r1r8r)rr2r5r!r8rrr r8s zBaseContext.ArraycCs,tjdkr(ttddr(ddlm}|dS)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)sysplatformgetattrspawnr;)rr;rrr r;s zBaseContext.freeze_supportcCsddlm}|S)zZReturn package logger -- if it does not already exist then it is created. r) get_logger)utilr@)rr@rrr r@s zBaseContext.get_loggercCsddlm}||S)z8Turn on logging and add a handler which prints to stderrr) log_to_stderr)rArB)rlevelrBrrr rBs zBaseContext.log_to_stderrcCsddlm}dS)zVInstall support for sending connections and sockets between processes r)rN)r)rrrrr allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)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?rF)r executablerFrrr rFs zBaseContext.set_executablecCsddlm}||dS)zkSet list of module names to try to load in forkserver process. This is really just a hint. r)set_forkserver_preloadN) forkserverrH)rZ module_namesrHrrr rHs z"BaseContext.set_forkserver_preloadcCsH|dkr |Sz t|}Wn"tk r:td|dYnX||S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrrrr rs zBaseContext.get_contextFcCs|jSN)_namerZ allow_nonerrr get_start_methodszBaseContext.get_start_methodcCs tddS)Nz+cannot set start method of concrete context)rLrrNZforcerrr set_start_methodszBaseContext.set_start_methodcCs tdS)z_Controls how objects will be reduced to a form that can be shared with other processes.r)globalsgetrrrr reducerszBaseContext.reducercCs|td<dS)Nr)rU)rrrrr rXscCsdSrOrrWrrr rMszBaseContext._check_available)T)N)r)r)NN)r)r)NNrN)N)N)F)F)+rr r rr r r staticmethodrZcurrent_processZparent_processZactive_childrenrrrrrr r"r$r%r&r)r,r-r.r0r4r6r8r;r@rBrErFrHrrRrTpropertyrXsetterrMrrrr rsR                rc@seZdZdZeddZdS)ProcessNcCstj|SrO)_default_contextrr\_Popen) process_objrrr r^szProcess._Popenrr r Z _start_methodrYr^rrrr r\sr\csFeZdZeZddZd fdd ZdddZdd d Zd d ZZ S)DefaultContextcCs||_d|_dSrO)r]_actual_context)rr/rrr __init__szDefaultContext.__init__Ncs0|dkr |jdkr|j|_|jSt|SdSrO)rbr]superr)rrN __class__rr rs  zDefaultContext.get_contextFcCs<|jdk r|std|dkr,|r,d|_dS|||_dS)Nzcontext has already been set)rb RuntimeErrorrrSrrr rTs  zDefaultContext.set_start_methodcCs"|jdkr|rdS|j|_|jjSrO)rbr]rPrQrrr rRs  zDefaultContext.get_start_methodcCsBtjdkrdgStjdkr"ddgnddg}tjr:|d|SdS)Nr9r?darwinforkrI)r<r=rHAVE_SEND_HANDLEappend)rmethodsrrr get_all_start_methodss   z$DefaultContext.get_all_start_methods)N)F)F) rr r r\rcrrTrRrm __classcell__rrrer ras   rar9c@seZdZdZeddZdS) ForkProcessricCsddlm}||SNr)Popen)Z popen_forkrqr_rqrrr r^s zForkProcess._PopenNr`rrrr rosroc@seZdZdZeddZdS) SpawnProcessr?cCsddlm}||Srp)Zpopen_spawn_posixrqrrrrr r^s SpawnProcess._PopenNr`rrrr rssrsc@seZdZdZeddZdS)ForkServerProcessrIcCsddlm}||Srp)Zpopen_forkserverrqrrrrr r^ s zForkServerProcess._PopenNr`rrrr rusruc@seZdZdZeZdS) ForkContextriN)rr r rPror\rrrr rv%srvc@seZdZdZeZdS SpawnContextr?Nrr r rPrsr\rrrr rx)srxc@seZdZdZeZddZdS)ForkServerContextrIcCstjstddS)Nz%forkserver start method not available)rrjrLrWrrr rM0sz"ForkServerContext._check_availableN)rr r rPrur\rMrrrr rz-srz)rir?rIrhr?ric@seZdZdZeddZdS)rsr?cCsddlm}||Srp)Zpopen_spawn_win32rqrrrrr r^Ds rtNr`rrrr rsBsc@seZdZdZeZdSrwryrrrr rxIscCst|t_dSrO)rJr]rb)rNrrr _force_start_methodVsr{cCs ttddS)Nspawning_popen)r>_tlsrrrr get_spawning_popen_sr~cCs |t_dSrO)r}r|)popenrrr set_spawning_popenbsrcCs tdkrtdt|jdS)NzF%s objects should only be shared between processes through inheritance)r~rgtyper)objrrr assert_spawninges  r) rr<Z threadingrDrr__all__ Exceptionrr r robjectrZ BaseProcessr\rar=rorsrurvrxrzrJr]r{Zlocalr}r~rrrrrr sL  ?,