乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       Coder編程 2020-03-09

      針對(duì)多進(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)

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

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多