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
| import time
import multiprocessing
class SProcess(multiprocessing.Process):
def __init__(self):
super().__init__()
self._stopper = multiprocessing.Event()
def stopit(self):
self._stopper.set()
def stopped(self):
return self._stopper.is_set()
def start(self):
super().start()
def run(self):
super().run()
while not self.stopped(): time.sleep(1)
class Updater:
fluxs=property(lambda self: list(self.__fluxs))
def __init__(self):
print("creation updater", self)
self.__fluxs = set()
def __del__(self):
print("destrution updater", self)
def add(self, f): self.__fluxs.add(f)
def remove(self, f): self.__fluxs.discard(f)
def dispose(self):
for f in self.__fluxs:
f.stopit()
f.join()
self.__fluxs.clear()
def startFluxs(self):
for f in self.__fluxs: f.start()
def changed(self):
pass
class Flux(SProcess):
def __init__(self, updater):
super().__init__()
self.__updater=updater
self.__updater.add(self)
print("creation flux", self)
def __del__(self):
self.__updater.remove(self)
print("destrution flux", self)
@property
def notifyFunc(self): return self._notifyFunc
@notifyFunc.setter
def notifyFunc(self, value): self._notifyFunc = value
def simmulation():
print("creation")
u = Updater()
f1 = Flux(u)
f2 = Flux(u)
print("start all flux")
u.startFluxs()
print("pause")
time.sleep(5)
print("dispose updater")
u.dispose()
if __name__ == "__main__":
print("-DEBUT---------------------------------------------------")
simmulation()
print("-END-----------------------------------------------------") |
Partager