开发者社区> 问答> 正文

解释Flask框架中的Local对象和threading.local对象的区别?

解释Flask框架中的Local对象和threading.local对象的区别?

展开
收起
珍宝珠 2019-11-22 13:22:59 1932 0
1 条回答
写回答
取消 提交回答
  • # a.threading.local
    作用:为每个线程开辟一块空间进行数据存储(数据隔离)。
    
    问题:自己通过字典创建一个类似于threading.local的东西。
    storage = {
       4740: {val: 0},
       4732: {val: 1},
       4731: {val: 3},
       }
    
    # b.自定义Local对象
    作用:为每个线程(协程)开辟一块空间进行数据存储(数据隔离)。
    class Local(object):
       def __init__(self):
          object.__setattr__(self, 'storage', {})
       def __setattr__(self, k, v):
          ident = get_ident()
          if ident in self.storage:
             self.storage[ident][k] = v
          else:
             self.storage[ident] = {k: v}
       def __getattr__(self, k):
          ident = get_ident()
          return self.storage[ident][k]
    obj = Local()
    def task(arg):
       obj.val = arg
       obj.xxx = arg
       print(obj.val)
    for i in range(10):
       t = Thread(target=task, args=(i,))
       t.start()
    
    2019-11-22 13:23:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP运行机制初探 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载