a d@s:ddlZddlZddlmZddlmZddlmZmZejZ gdZ ej ej ej ejejejejejejejejejejejdZdd Zd d Zd d ZdddddZdddddZddZd'ddZ ddZ!ddZ"ddZ#dZ$iZ%e&Z'Gdd d e(Z)Gd!d"d"e)Z*Gd#d$d$e)Z+Gd%d&d&e+Z,dS)(N)heap) get_context) reductionassert_spawning)RawValueRawArrayValueArraycopy synchronized)cubBhHiIlLqQfdcCs t|}t|}t||dSN)ctypessizeofr BufferWrapper rebuild_ctype)type_sizewrapperr#4/usr/lib64/python3.9/multiprocessing/sharedctypes.py _new_value's  r%cGs<t||}t|}tt|dt||j||S)z> Returns a ctypes object allocated from shared memory r)typecode_to_typegetr%rmemset addressofr__init__)typecode_or_typeargsr objr#r#r$r,s   rcCsjt||}t|trD||}t|}tt|dt||S|t |}t|}|j ||SdS)z= Returns a ctypes array allocated from shared memory rN) r&r' isinstanceintr%rr(r)rlenr*)r+size_or_initializerr r-resultr#r#r$r6s    rT)lockctxcGsZt|g|R}|dur|S|dvr6|p,t}|}t|dsLtd|t|||dS)z6 Return a synchronization wrapper for a Value FTNacquire%r has no method 'acquire'r4)rrRLockhasattrAttributeErrorr )r+r3r4r,r-r#r#r$r Fs   r cCsTt||}|dur|S|dvr0|p&t}|}t|dsFtd|t|||dS)z9 Return a synchronization wrapper for a RawArray Fr5r6r7r8)rrr9r:r;r )r+r1r3r4r-r#r#r$r Ts    r cCstt|}|t|d<|S)Nr)r%typerpointer)r-new_objr#r#r$r bs r cCst|trJd|pt}t|tjr4t|||St|tjrd|jtjurXt |||St |||St |}z t |}WnPt ydd|jD}dd|D}d|j}t |tf|}t |<Yn0||||SdS)Nzobject already synchronizedcSsg|] }|dqS)rr#).0fieldr#r#r$ vz synchronized..cSsi|]}|t|qSr#) make_property)r?namer#r#r$ wrBz synchronized.. Synchronized)r.SynchronizedBaserr _SimpleCDatarFr _type_c_charSynchronizedStringSynchronizedArrayr< class_cacheKeyError_fields___name__)r-r3r4clssclsnamesr classnamer#r#r$r gs"          r cCs@t|t|tjr(t|j|j|jffStt||jdffSdSr) rr.rr rrI_wrapper_length_r<)r-r#r#r$ reduce_ctypes rWcCs8|dur||}t|t|}||}||_|Sr)_ForkingPicklerregisterrWcreate_memoryview from_bufferrU)r r"lengthbufr-r#r#r$rs  rcCsNz t|WStyHi}tt|fd|||t|<||YS0dS)N) prop_cacherNexectemplate)rDrr#r#r$rCs   rCz def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)rGNcCsB||_|r||_n|ptdd}||_|jj|_|jj|_dS)NT)force)_obj_lockrr9r6release)selfr-r3r4r#r#r$r*s  zSynchronizedBase.__init__cCs |jSr)rd __enter__rfr#r#r$rgszSynchronizedBase.__enter__cGs |jj|Sr)rd__exit__)rfr,r#r#r$riszSynchronizedBase.__exit__cCst|t|j|jffSr)rr rcrdrhr#r#r$ __reduce__szSynchronizedBase.__reduce__cCs|jSrrcrhr#r#r$get_objszSynchronizedBase.get_objcCs|jSr)rdrhr#r#r$get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r<rPrcrhr#r#r$__repr__szSynchronizedBase.__repr__)NN) rP __module__ __qualname__r*rgrirjrlrmrnr#r#r#r$rGs rGc@seZdZedZdS)rFvalueN)rProrprCrqr#r#r#r$rFsrFc@s4eZdZddZddZddZddZd d Zd S) rLcCs t|jSr)r0rcrhr#r#r$__len__szSynchronizedArray.__len__cCs2||j|WdS1s$0YdSrrk)rfrr#r#r$ __getitem__szSynchronizedArray.__getitem__cCs2|||j|<Wdn1s$0YdSrrk)rfrrqr#r#r$ __setitem__szSynchronizedArray.__setitem__cCs6||j||WdS1s(0YdSrrk)rfstartstopr#r#r$ __getslice__szSynchronizedArray.__getslice__cCs6|||j||<Wdn1s(0YdSrrk)rfrurvvaluesr#r#r$ __setslice__szSynchronizedArray.__setslice__N)rProrprrrsrtrwryr#r#r#r$rLs rLc@seZdZedZedZdS)rKrqrawN)rProrprCrqrzr#r#r#r$rKsrK)NN)-rweakrefrrcontextrrForkingPicklerrX__all__rJc_wcharc_bytec_ubytec_shortc_ushortc_intc_uintc_longc_ulong c_longlong c_ulonglongc_floatc_doubler&r%rrr r r r rWrrCrar_WeakKeyDictionaryrMobjectrGrFrLrKr#r#r#r$ s>