Merge branch 'master' of git.kaiyuancloud.cn:yumoqing/apppublic
This commit is contained in:
commit
25fc565343
56
appPublic/psm.py
Normal file
56
appPublic/psm.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import json
|
||||||
|
from time import sleep
|
||||||
|
from multiprocessing import Manager
|
||||||
|
from multiprocessing.shared_memory import SharedMemory
|
||||||
|
from multiprocessing.resource_tracker import unregister
|
||||||
|
|
||||||
|
class PSharedMemory:
|
||||||
|
tailstring=b'#:@#'
|
||||||
|
def __init__(self, name, datalen, data=None):
|
||||||
|
self.sm = None
|
||||||
|
self.name = name
|
||||||
|
self.datalen = datalen
|
||||||
|
self.lock = Manager().Lock()
|
||||||
|
if data:
|
||||||
|
self.sm = SharedMemory(name=self.name, create=True, size=self.datalen)
|
||||||
|
self.creator = True
|
||||||
|
self.set(data)
|
||||||
|
else:
|
||||||
|
self.sm = SharedMemory(name=self.name)
|
||||||
|
unregister(self.sm._name, 'shared_memory')
|
||||||
|
self.creator = False
|
||||||
|
|
||||||
|
def get(self):
|
||||||
|
b = self.sm.buf.tobytes().split(self.tailstring)[0]
|
||||||
|
d = b.decode('utf-8')
|
||||||
|
return json.loads(d)
|
||||||
|
|
||||||
|
def set(self, data):
|
||||||
|
with self.lock:
|
||||||
|
d = json.dumps(data)
|
||||||
|
b = d.encode('utf-8') + self.tailstring
|
||||||
|
if self.datalen < len(b):
|
||||||
|
raise Exception(f'SharedMemory allocated size is {self.datalen} set size is {len(b)}')
|
||||||
|
self.sm.buf[:len(b)] = b
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
if self.sm is None:
|
||||||
|
return
|
||||||
|
self.sm.close()
|
||||||
|
if self.creator:
|
||||||
|
self.sm.unlink()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import sys
|
||||||
|
data = {
|
||||||
|
"aaa":"134902t34gf",
|
||||||
|
"bbb":36
|
||||||
|
}
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
sm = PSharedMemory('rtgerigreth', datalen=200, data=data)
|
||||||
|
sleep(10000)
|
||||||
|
else:
|
||||||
|
sm = PSharedMemory('rtgerigreth', datalen=200 )
|
||||||
|
x = sm.get()
|
||||||
|
print(f'data in shared memory: {x}')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user