小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python實(shí)現(xiàn)自安全的數(shù)據(jù)結(jié)構(gòu)

 Coder編程 2020-03-09

針對多進(jìn)程或者多線程訪問共享數(shù)據(jù)時(shí),經(jīng)常需要在業(yè)務(wù)層控制鎖,增加腦力負(fù)荷,這里設(shè)計(jì)一種通用的方式,鎖操作直接封裝在數(shù)據(jù)結(jié)構(gòu)中。 直接貼代碼

#!/usr/bin/env python
# encoding: utf-8

from multiprocessing import Lock, RLock


def make_property(name):
    try:
        return prop_cache[name]
    except KeyError:
        d = {}
        exec(template % ((name,) * 7), d)
        prop_cache[name] = d[name]
        return d[name]


template = '''
def get%s(self):
    self.acquire()
    try:
        return self._obj.%s
    finally:
        self.release()
def set%s(self, value):
    self.acquire()
    try:
        self._obj.%s = value
    finally:
        self.release()
%s = property(get%s, set%s)
'''

prop_cache = {}


class SynchronizedBase(object):

    def __init__(self, obj, lock=None):
        self._obj = obj
        if lock:
            self._lock = lock
        else:
            self._lock = RLock()

        self.acquire = self._lock.acquire
        self.release = self._lock.release

    def __enter__(self):
        return self._lock.__enter__()

    def __exit__(self, *args):
        return self._lock.__exit__(*args)

    def get_obj(self):
        return self._obj

    def get_lock(self):
        return self._lock

    def __repr__(self):
        return '<%s wrapper for %s>' % (type(self).__name__, self._obj)


class Synchronized(SynchronizedBase):
    value = make_property('value')


class Obj(object):
    def __init__(self, value):
        self.value = value


def SafeObj(obj, lock=None):
    return Synchronized(obj, lock)


if __name__ == '__main__':
    a = SafeObj(Obj(3))
    b = SafeObj(Obj(4), Lock())
    print(a.value)
    print(b.value)

SafeObjObj進(jìn)行包裝,返回一個(gè)含有同步原語的對象。由于足夠抽象,對它的訪問行為和對Obj一致。 代碼還可以再進(jìn)行擴(kuò)展,比如Synchronized怎樣怎樣訪問Objmethod等。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多