File size: 2,663 Bytes
0e6f104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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()