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 cCs|pt}t|tjr"t|||St|tjrR|jtjkrFt|||St |||St |}z t |}WnRt k rdd|j D}dd|D}d|j}t |tf|}t |<YnX||||SdS)NcSsg|] }|dqS)rr").0Zfieldr"r"r# vsz synchronized..cSsi|]}|t|qSr") make_property)r<namer"r"r# wsz synchronized.. Synchronized)rr-rZ _SimpleCDatarAr _type_c_charSynchronizedStringSynchronizedArrayr; class_cacheKeyErrorZ_fields___name__SynchronizedBase)r,r2r3clsZsclsnamesrZ classnamer"r"r#r gs          cCs@t|t|tjr(t|j|j|jffStt||jdffSdSr) rr-rr rrB_wrapperZ_length_r;)r,r"r"r# reduce_ctypes rMcCs8|dk r||}t|t|}||}||_|Sr)_ForkingPicklerregisterrMZcreate_memoryviewZ from_bufferrL)rr!ZlengthZbufr,r"r"r#rs  rcCsPz t|WStk rJi}tt|fd|||t|<||YSXdS)N) prop_cacherGexectemplate)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)rINcCsB||_|r||_n|ptdd}||_|jj|_|jj|_dS)NT)Zforce)_obj_lockrr8r5release)selfr,r2r3r"r"r#r)s  zSynchronizedBase.__init__cCs |jSr)rU __enter__rWr"r"r#rXszSynchronizedBase.__enter__cGs |jj|Sr)rU__exit__)rWr+r"r"r#rZszSynchronizedBase.__exit__cCst|t|j|jffSr)rr rTrUrYr"r"r# __reduce__szSynchronizedBase.__reduce__cCs|jSrrTrYr"r"r#get_objszSynchronizedBase.get_objcCs|jSr)rUrYr"r"r#get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r;rHrTrYr"r"r#__repr__szSynchronizedBase.__repr__)NN) rH __module__ __qualname__r)rXrZr[r]r^r_r"r"r"r#rIs rIc@seZdZedZdS)rAvalueN)rHr`rar>rbr"r"r"r#rAsrAc@s4eZdZddZddZddZddZd d Zd S) rEcCs t|jSr)r/rTrYr"r"r#__len__szSynchronizedArray.__len__c Cs&||j|W5QRSQRXdSrr\)rWrr"r"r# __getitem__szSynchronizedArray.__getitem__c Cs|||j|<W5QRXdSrr\)rWrrbr"r"r# __setitem__szSynchronizedArray.__setitem__c Cs*||j||W5QRSQRXdSrr\)rWstartstopr"r"r# __getslice__szSynchronizedArray.__getslice__c Cs"|||j||<W5QRXdSrr\)rWrfrgvaluesr"r"r# __setslice__szSynchronizedArray.__setslice__N)rHr`rarcrdrerhrjr"r"r"r#rEs rEc@seZdZedZedZdS)rDrbrawN)rHr`rar>rbrkr"r"r"r#rDsrD)NN)-rweakrefrrcontextrrZForkingPicklerrN__all__rCZc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZ c_longlongZ c_ulonglongZc_floatZc_doubler%r$rrr r r r rMrr>rSrQWeakKeyDictionaryrFobjectrIrArErDr"r"r"r# sL