ciph / multi_locker.py
t5
apple
0e6f104
Raw
History Blame Contribute Delete
2.66 kB
import sys,os
from collections import defaultdict
import multiprocessing
from multiprocessing import Lock, Process, Event
from multiprocessing.managers import SyncManager
from contextlib import contextmanager
class multi_locker:
def __init__(zl):
zl.lock = Lock()
zl.lockli = defaultdict(Lock)
zl.event_lock = Lock()
zl.eventli = defaultdict(Event)
def acquire(zl, name):
with zl.lock:
lock = zl.lockli[name]
lock.acquire()
def release(zl, name):
with zl.lock:
lock = zl.lockli[name]
lock.release()
"event"
def notready(zl, name):
with zl.event_lock:
ev = zl.eventli[name]
ev.clear()
def wait(zl, name, timeout=None):
with zl.event_lock:
ev = zl.eventli[name]
ev.wait(timeout=timeout)
def ready(zl, name):
with zl.event_lock:
ev = zl.eventli[name]
ev.set()
f=""
def fil(zl,*w,**W):
zl.f+=str(w)
return zl.f
def fil2(zl):return zl
#
def fwfw(*w):fwfw
def fin2(*w):
if "need to start with start()":
mana.shutdown()
def fin(*w):sys.exit()# not
"not unicorn"
def meg(zl,name):1
def locker(zl, name):
return zl.lockli[name]
class maimai(SyncManager): pass
maimai.register('multi_locker', multi_locker)
from multiprocessing.managers import BaseProxy
class pr(BaseProxy):
def acquire(zl, name: str):
return zl._callmethod('acquire', (name,))
def release(zl, name: str):
return zl._callmethod('release', (name,))
def __getattr__(zl,at):
def fp(*w,**W):
return zl._callmethod(at, w,W)
return fp
@contextmanager
def locker(zl, name: str):
zl.acquire(name)
try:
yield None
finally:
zl.release(name)
if 1:
port=6969
def main():
global mana
#maimai.register('n', lambda:multi_locker(), proxytype=pr)
one=multi_locker()
maimai.register('one', lambda:one)
_mana=mana=maimai(("localhost",port),b"p")
mana.get_server().serve_forever()
#mana.start()# cant pickle "lambda"
#mana.shutdown()
print("mana")
return mana
def browser(port):
_mana=mana=maimai(("localhost",port),b"p")
mana.connect()
mana.register('one',None,pr)
return mana.one().locker
def iniport(port):
import subprocess
from mlwebOrWeb import chkbind
if chkbind(port):
subprocess.Popen(["py",__file__, f'{port}'])
from multiprocessing import freeze_support
if __name__ == '__main__':
freeze_support() # ?
main()