U ,a@sBddlZddlZddlmZddlmZddlmZmZejZ dddd d d gZ ej ej ej ejejejejejejejejejejejd Zd dZddZddZdddddZddddd Zdd Zd&dd Z ddZ!ddZ"ddZ#dZ$iZ%e&Z'Gddde(Z)Gd d!d!e)Z*Gd"d#d#e)Z+Gd$d%d%e+Z,dS)'N)heap) get_context) reductionassert_spawningRawValueRawArrayValueArraycopy synchronized)cubBhHiIlLqQfdcCs t|}t|}t||dSN)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperr"A/opt/alt/python38/lib64/python3.8/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_typeargsrobjr"r"r#r,s   cCsjt||}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_initializerrr,resultr"r"r#r6s    T)lockctxcGsXt|f|}|dkr|S|dkr4|p*t}|}t|dsJtd|t|||dS)z6 Return a synchronization wrapper for a Value FTNacquire%r has no method 'acquire'r3)rrRLockhasattrAttributeErrorr )r*r2r3r+r,r"r"r#r Fs   cCsTt||}|dkr|S|dkr0|p&t}|}t|dsFtd|t|||dS)z9 Return a synchronization wrapper for a RawArray Fr4r5r6r7)rrr8r9r:r )r*r0r2r3r,r"r"r#r Ts    cCstt|}|t|d<|S)Nr)r$typerZpointer)r,Znew_objr"r"r#r bs cCst|trtd|pt}t|tjr4t|||St|tjrd|jtj krXt |||St |||St |}z t |}WnRtk rdd|jD}dd|D}d|j}t |tf|}t |<YnX||||SdS)Nzobject already synchronizedcSsg|] }|dqS)rr").0Zfieldr"r"r# vsz synchronized..cSsi|]}|t|qSr") make_property)r<namer"r"r# wsz synchronized.. Synchronized)r-SynchronizedBaseAssertionErrorrrZ _SimpleCDatarAr _type_c_charSynchronizedStringSynchronizedArrayr; class_cacheKeyErrorZ_fields___name__)r,r2r3clsZsclsnamesrZ classnamer"r"r#r gs"         cCs@t|t|tjr(t|j|j|jffStt||jdffSdSr) rr-rr rrD_wrapperZ_length_r;)r,r"r"r# reduce_ctypes rNcCs8|dk r||}t|t|}||}||_|Sr)_ForkingPicklerregisterrNZcreate_memoryviewZ from_bufferrM)rr!ZlengthZbufr,r"r"r#rs  rcCsPz t|WStk rJi}tt|fd|||t|<||YSXdS)N) prop_cacherIexectemplate)r?rr"r"r#r>s  r>z 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)rBNcCsB||_|r||_n|ptdd}||_|jj|_|jj|_dS)NT)Zforce)_obj_lockrr8r5release)selfr,r2r3r"r"r#r)s  zSynchronizedBase.__init__cCs |jSr)rV __enter__rXr"r"r#rYszSynchronizedBase.__enter__cGs |jj|Sr)rV__exit__)rXr+r"r"r#r[szSynchronizedBase.__exit__cCst|t|j|jffSr)rr rUrVrZr"r"r# __reduce__szSynchronizedBase.__reduce__cCs|jSrrUrZr"r"r#get_objszSynchronizedBase.get_objcCs|jSr)rVrZr"r"r#get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r;rJrUrZr"r"r#__repr__szSynchronizedBase.__repr__)NN) rJ __module__ __qualname__r)rYr[r\r^r_r`r"r"r"r#rBs rBc@seZdZedZdS)rAvalueN)rJrarbr>rcr"r"r"r#rAsrAc@s4eZdZddZddZddZddZd d Zd S) rGcCs t|jSr)r/rUrZr"r"r#__len__szSynchronizedArray.__len__c Cs&||j|W5QRSQRXdSrr])rXrr"r"r# __getitem__szSynchronizedArray.__getitem__c Cs|||j|<W5QRXdSrr])rXrrcr"r"r# __setitem__szSynchronizedArray.__setitem__c Cs*||j||W5QRSQRXdSrr])rXstartstopr"r"r# __getslice__szSynchronizedArray.__getslice__c Cs"|||j||<W5QRXdSrr])rXrgrhvaluesr"r"r# __setslice__szSynchronizedArray.__setslice__N)rJrarbrdrerfrirkr"r"r"r#rGs rGc@seZdZedZedZdS)rFrcrawN)rJrarbr>rcrlr"r"r"r#rFsrF)NN)-rweakrefrrcontextrrZForkingPicklerrO__all__rEZc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZ c_longlongZ c_ulonglongZc_floatZc_doubler%r$rrr r r r rNrr>rTrRWeakKeyDictionaryrHobjectrBrArGrFr"r"r"r# sL