Bonjour
j'ai fait un exemple auto porteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
import time
import multiprocessing
 
class SProcess(multiprocessing.Process): 
 
    def __init__(self):
        multiprocessing.Process.__init__(self)
        self._stopper = multiprocessing.Event()
 
    def stopit(self):
        self._stopper.set()
 
    def stopped(self):
        return self._stopper.is_set()
 
    def run(self):
        while True:
            if not self.stopped():
                time.sleep(1)    
            else: return
 
class Updater:
 
    def __init__(self):
        print("creation updater")
        self.__fluxs = []
 
    def __del__(self):
        print("destrution updater")
 
    def dispose(self):
        for f in self.__fluxs:
            f.stopit()
            f.join()
        self.__fluxs.clear()
 
    def __iadd__(self, flux):
        #flux.notifyFunc = self.changed
        self.__fluxs.append(flux)
        return self
 
    def startFluxs(self):
        for f in self.__fluxs:
            f.start()
 
    def changed(self):
         pass
 
class Flux(SProcess):
 
    def __init__(self):
        SProcess.__init__(self)
        self.notifyFunc = None
        print("creation flux")
 
    def __del__(self):
        print("destrution flux")
 
    @property
    def notifyFunc(self): return self._notifyFunc
 
    @notifyFunc.setter
    def notifyFunc(self, value): self._notifyFunc = value
 
 
def simmulation():
    print("creation")
    u = Updater()
    f1 = Flux()
    f2 = Flux()
    u += f1
    u += f2
    print("start all flux")
    u.startFluxs()
    print("pause")
    time.sleep(10)
    print("dispose updater")
    u.dispose()
 
if __name__ == "__main__":   
    print("-DEBUT---------------------------------------------------")
    simmulation()
    print("-END-----------------------------------------------------")
j'ai j'ai donc deux soucis :

Premier
si je decommente la ligne 38 (flux.notifyFunc = self.changed)
j'arrive plus a démarrer (cannot pickle 'weakref' object)

Le second
que je regarde la destruction
ben ca détruit deux fois les class flux comme si le passage avait ete dupliqué
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-DEBUT---------------------------------------------------
creation
creation updater
creation flux
creation flux
start all flux
pause
dispose updater
destrution flux
destrution flux
destrution updater
destrution flux
destrution flux
-END-----------------------------------------------------
y'a quoi dans mon (magnifique) code qui coince ?
si vous avez une idée