搜索
首页后端开发Python教程python学习笔记 - ThreadLocal
python学习笔记 - ThreadLocal Feb 16, 2017 am 11:03 AM
pythonthreadlocal

我们在编写多线程程序的时候,往往会遇到两种类型的变量。

  • 一种是全局变量,多个线程共享。为了避免改乱为,我们在前面已经提到说要加锁。

  • 一种是局部变量。仅供一个线程使用,线程间相互不影响。

例如下列程序中task()函数中定义的count变量就是局部变量。即使我们创建了两个线程,两者的count递增也不会相互影响,因为count是在task中定义的。

import threading


def task():
    count = 0
    for i in range(1000):
        count += 1
        print count


if __name__ == '__main__':
    t1 = threading.Thread(target=task)
    t1.start()
    t2 = threading.Thread(target=task)
    t2.start()

那么,这么处理是不是就完美了呢?其实还不是。
以上的例子我们举的是一个非常简单的例子,但是我们遇到一个比较复杂的业务逻辑的时候,比如多个局部变量,函数多重调用等,这么定义局部变量就会变得不简洁,麻烦。
函数多重调用是指,例如:
我们定义了函数,methodA(),这个方法体内调用了methodB(), methodB()方法体中又调用了methodC()...
如果我们在某一个线程中调用了methodA()并且使用了一个变量attr,那么我们就需要将attr一层一层地传递给后续的函数。

有没有一种方法,能让我们在线程中定义一个变量后,那么这个线程中的函数就都能调用,如此才叫简洁明了?
Python为我们做到了,那就是ThreadLocal.
ThreadLocal的用法只需要三步:

  • 定义一个对象 threading.local

  • 在线程内给该对象绑定参数。所有绑定的参数都是线程隔离的。

  • 在线程内调用。

下面展示一下代码:

# coding=utf-8
import threading

local = threading.local() # 创建一个全局的对象


def task():
    local.count = 0  # 初始化一个线程内变量,该变量线程间互不影响。
    for i in range(1000):
        count_plus()


def count_plus():
    local.count += 1
    print threading.current_thread().name, local.count


if __name__ == '__main__':
    t1 = threading.Thread(target=task)
    t1.start()
    t2 = threading.Thread(target=task)
    t2.start()

更多python学习笔记 - ThreadLocal 相关文章请关注PHP中文网!


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Java ThreadLocal类如何使用Java ThreadLocal类如何使用May 14, 2023 pm 06:49 PM

如图所示:快速开始接下来我们就先用一个简单的样例给大家展示一下ThreadLocal的基本用法packagecuit.pymjl.thradlocal;/***@authorPymjl*@version1.0*@date2022/7/110:56**/publicclassMainTest{staticThreadLocalthreadLocal=newThreadLocal();staticvoidprint(Stringstr){//打印当前线程中本地内存中本地变量的值System.out.

详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

Java自定义过滤器和拦截器实现ThreadLocal线程封闭Java自定义过滤器和拦截器实现ThreadLocal线程封闭May 15, 2023 pm 11:40 PM

线程封闭线程封闭一般通过以下三个方法:Ad-hoc线程封闭:程序控制实现,最糟糕,忽略堆栈封闭:局部变量,无并发问题ThreadLocal线程封闭:特别好的封闭方法方法2是最常用的,变量定义在接口内,本文主要讲解方法三,SpringBoot项目通过自定义过滤器和拦截器实现ThreadLocal线程封闭。实现Filter接口自定义过滤器和继承HandlerInterceptorAdapter自定义拦截器。ThreadLocal线程封闭实现步骤封装ThredLocal的方法/***自定义Reques

分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具