خرید بک لینک

Vote count: 0

I want to write a class with singleton patte to provide some persistent data storage using pickle/dict:

@singleton
class Pdata:
    def __init__(self):
        self.cache = None
        self.dirty = False
        try:
            with open("data.pck","rb") as fp:
                self.cache = pickle.load(fp)
        except FileNotFoundError:
            pass
        except pickle.PickleError:
            pass

        if self.cache is None:
            self.cache = {}

    def flush(self):
        if self.dirty:
            try:
                with open("inverse-U-cache.pck","wb") as fp:
                    pickle.dump(self.cache,fp,protocol=4)
            except IOError:
                pass
            except pickle.PickleError:
                pass
            else:
                self.dirty = False

    def __del__(self): # PROBLEM HERE
        self.flush()

When I was using python 2, I can do it by overriding __del__. But it does not appear to be correct in python 3. How can I do it?

If I do it by "with" statement, I will need to pass the instance to each function that I call:

def func1(db):
    db.set(...)
    func3(db,x1,x2,...)

with Pdb() as db:
    func1(db)
    func2(db)

It is complicated. Is there a pythonic way to do a global scope "with" statement?

asked 24 secs ago

برچسب: نویسنده: استخدام کار تاريخ: پنجشنبه 17 تير 1395 ساعت: 13:43

صفحه بندی