Bonjour,
j'essaye tant bien que mal de deserialiser une instance d'object (pattern singleton) à l'aide de pickle.
le probleme est le suivant :
Si je serialize puis deserialize mon instance dans un meme script py, tout se passe bien, cependant, si je fais la serialization et la deserialization a l'aide de deux scripts distincts.. je ne recupere pas l'instance creer lors de la serialization.

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
 
#Object a pickler/depickler
class Workers:  
    #Singleton
    instance = None
 
    class __Impl:
 
        def __init__(self):
            self.attribut = "test"
 
    def __init__(self):
 
        if not Workers.instance:
            Workers.instance = Workers.__Impl()  
 
    def __getattr__(self, attr):
        """ Delegate access to implementation """
        return getattr(self.instance, attr)
 
    def __setattr__(self, attr, value):
        """ Delegate access to implementation """
        return setattr(self.instance, attr, value)
Dans le code suivant, on retrouve bien l'instance apres deserialization (stdout)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#test.py
import pickle
Serial = Workers()
fd = open("worker.xxx", 'w')
pickle.dump(Serial, fd, pickle.HIGHEST_PROTOCOL)
fd.close()
 
fd = open("worker.xxx", "r")
Deserial = pickle.load(fd)
fd.close()
print Deserial
>> stdout :: <Workers.Workers instance at 0x01E88800>
Alors que si je fais ca en deux temps (lancer test1.py puis test2.py), je recupere None (stdout) :

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
 
#test1.py
import pickle
Serial = Workers()
fd = open("worker.xxx", 'w')
pickle.dump(Serial, fd, pickle.HIGHEST_PROTOCOL)
fd.close()
 
#test2.py
import pickle
fd = open("worker.xxx", "r")
deserial = pickle.load(fd)
fd.close()
print deserial
>> stdout :: None
Par ailleurs, si j'essaye d'acceder a "attribut", l'exception AttibuteError de declanhe :
AttributeError: 'NoneType' object has no attribute 'attribut'

Quelqu'un aurait une idee d'ou peu venir le probleme?...plz