threding.local

Posted wt7018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了threding.local相关的知识,希望对你有一定的参考价值。

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

示例

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的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器