python多进程的threadlocal对象

1 篇文章 0 订阅
1 篇文章 0 订阅

在多线程的环境下,某些特定场景,多线程使用自己的局部变量比使用全局变量要好,不会影响其他线程因此不用加锁

但是线程在使用局部变量的时候也有缺点,就是当多层函数调用的时候,参数传起来不是很方便,如:

在这里插入图片描述
这样传参,如果调用的函数较多较频繁,则很麻烦

再如,我们可以使用全局字典的方式进行提取每个线程自己对应的值,取消传参的操作,如:
在这里插入图片描述
将线程的名字作为键,变量直接传入字典中作为对应线程键的值
这样也可以达到传参的效果
但是这样写会有些小小的lower,体现不出来高大上的代码风格,于是我们使用threadlocal对象

import threading

local = threading.local()  #生成一个threadlocal对象
list1 = []  #建一个全局容器

def t_name(name):
    local.name = name  #获取传入的参数,赋值给local对象
    t_thread()  #调用下层函数

def t_thread():
    list1.append(local.name)  #获取name添加到列表中
    print(list1,threading.current_thread().name)

t1 = threading.Thread(target=t_name,args=('haha',),name='A')
t2 = threading.Thread(target=t_name,args=('xixi',),name='B')
t1.start()  #开启
t2.start()
t1.join()  #阻塞
t2.join()

结果

['haha'] A
['haha', 'xixi'] B

ok,完成
ThreadLocal 最常用的地方就是为每个线程绑定一个数据库连接,HTTP 请求, 用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问 这些资源。
一个 threadLocal 变量虽然是全局变量,但每个线程都只能读写自己线程的独立 副本,互不干扰。threadLocal 解决了参数在一个线程中各个函数之间互相传递 的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值