首页 > 其他 > 详细

threding.local

时间:2019-09-28 16:15:35      阅读:111      评论:0      收藏:0      [点我收藏+]

作用:为每一个线程开辟一个独立的内存空间

示例

from threading import Thread, local
import time

obj = local()


def test(i):
    obj.xx = i
    time.sleep(2)
    print(obj.xx, i)


for i in range(10):
    t = Thread(target=test, args=(i, ))
    t.start()

实现原理

from threading import Thread
import threading
import time

#
dic = {}


def test(i):
    index = threading.get_ident()
    if index in dic:
        dic[index][xx] = i
    else:
        dic[index] = {xx: i}
    time.sleep(1)
    print(dic[index][xx], i)


for i in range(10):
    t = Thread(target=test, args=(i, ))
    t.start()

改良

import threading
import time
import greenlet

try:
    get_ident = greenlet.getcurrent
except Exception as e:
    get_ident = threading.get_ident


class Local:
    dic = {}

    def __getattr__(self, item):
        index = get_ident()
        if index in self.dic:
            return self.dic[index][item]
        else:
            return None

    def __setattr__(self, key, value):
        index = get_ident()
        if index in self.dic:
            self.dic[index][key] = value
        else:
            self.dic[index] = {key: value}


obj = Local()


def test(a):
    obj.xx = a
    time.sleep(2)
    print(obj.xx, a)


for i in range(10):
    t = threading.Thread(target=test, args=(i, ))
    t.start()

 

threding.local

原文:https://www.cnblogs.com/wt7018/p/11603467.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!