@

1.全局变量的修改

代码实现

num = 100
nums = [11,22] def test():
global num num += 100 def test2():
nums.append(33) print(num)
print(nums) test()
test2() print(num)
print(nums)

输出:

200

[11, 22, 33]

注意

  • num在函数中使用要先使用globel修饰,而nums是一个数组,在函数中使用的列表append方法,没有改变列表的原始指向所以可以不使用global
  • 故如果要重新赋值的数据类型(=号),那么要使用global修饰一下,不重新赋值的则不用

2.全局变量在多线程中的共享

代码实现

import threading

g_num = 100

def test1():
global g_num
g_num += 1
print("in test1 gnum = %d" % g_num) def test2():
print("in test2 gnum = %d" % g_num) def main():
t1 = threading.Thread(target=test1())
t2 = threading.Thread(target=test2()) t1.start()
t2.start() if __name__ == '__main__':
main()

输出:

in test1 gnum = 101

in test2 gnum = 101

注意

  • 可以看到两个线程的值相等
  • 这是由于在使用global的时候把全局变量锁住了,+完之后才释放

3.多线程可能遇到的问题

假设两个线程t1和t2都要多全局变量g_nums(默认为0)进行+1运算,t1和t2都各队g_num加10次

最终的结果应该为20,但是由于多线程的问题可能会出现问题

多任务-python实现-多线程共享全局变量(2.1.3)的更多相关文章

  1. Python 中多线程共享全局变量的问题

    写在前面不得不看的一些P话: Python 中多个线程之间是可以共享全局变量的数据的. 但是,多线程共享全局变量是会出问题的. 假设两个线程 t1 和 t2 都要对全局变量g_num (默认是0)进行 ...

  2. 一起学Python: 多线程-共享全局变量问题

    多线程-共享全局变量问题 多线程开发可能遇到的问题 假设两个线程t1和t2都要对全局变量g_num(默认是0)进行加1运算,t1和t2都各对g_num加10次,g_num的最终的结果应该为20. 但是 ...

  3. 一起学Python:多线程-共享全局变量

    多线程-共享全局变量 from threading import Thread import time g_num = 100 def work1(): global g_num for i in r ...

  4. python多线程-共享全局变量

    目录 多线程-共享全局变量 多线程-共享全局变量 列表当作实参传递到线程中 总结 多线程-共享全局变量问题 多线程开发可能遇到的问题 测试1 测试2 多线程-共享全局变量 多线程-共享全局变量 imp ...

  5. python编程系列---多线程共享全局变量出现了安全问题的解决方法

    多线程共享全局变量出现了安全问题的解决方法 当多线程共享全局变量时,可能出现安全问题,解决机制----互斥锁:即在在一段与全局变量修改相关的代码中,假设一个时间片不足以完成全局变量的修改,就在这段代码 ...

  6. 7.Python网络编程_多线程共享全局变量问题

    Python多线程支持全局变量的共享操作,但是它存在很多问题,先来看以下程序,该程序理论上执行完毕后全局变量g_num的值应该是2000000,但是在实际运行中,结果不足理论值 import thre ...

  7. python 多线程共享全局变量的问题

    多线程都是在同一个进程中运行的.因此在进程中的全局变量所有线程都是可共享的. 这就造成了一个问题,因为线程执行的顺序是无序的.有可能会造成数据错误. 直白理解:也就是多线程执行的时候,同时对一个全局变 ...

  8. 初识python:多线程

    多线程:在一个程序中,独立运行的程序片断叫作"线程"(Thread),利用它编程的概念就叫作"多线程处理".即:一个进程中,多个线程. 举个例说明:就像是一列火 ...

  9. python网络-多线程(22)

    一.什么是线程 线程(英语:thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.同一进程中的多条线程将共享该进程中的全部系统资源,一个进程可以有很多线程,每 ...

随机推荐

  1. 如何使用iMindMap的组织图表视图?

    除了常规的发散型思维导图外,iMindMap思维导图软件还提供了辐射导图.灵感导图.组织图表等多种导图形式,供用户更好地展现事项间的层级关系,而其中的组织图表更有助于展现上下级层级关系. 组织图表可以 ...

  2. Wasp XT合成器功能介绍

    本章节将采用图文结合的方式给大家讲解电音编曲软件FL Studio中的Wasp XT合成器的相关功能,感兴趣的朋友可以一起来交流哦. 下面我们一起来看看吧 Wasp XT是一个3振荡器合成器,它包含一 ...

  3. Vegas转场功能的妙用,让片头转场更酷炫

    如今视频剪辑已经是一件非常平常的事情了,很多时候我们制作一段或者剪辑一段视频,其实都比较简单,但是如果想要视频显得高级些,这时候就可以给自己的视频制作一个好看的片头了,具体该怎么做呢? 用视频剪辑软件 ...

  4. 统一软件开发过程(RUP)的概念和方法

    统一软件开发过程(Rational Unified Process,RUP)是一种面向对象且基于网络的程序开发方法论. 根据Rational(Rational Rose和统一建模语言的开发者)的说法, ...

  5. 统计API调用次数

    使用redis的有序集合, Zincrby https://redis.io/commands/zincrby 使用的symfony框架的这个方法,会返回接口名称 $request->getPa ...

  6. Contest 985

    A 均移到黑色或白色即可. 时间复杂度 \(O\left(n\log n\right)\). B 枚举每种开关判断是否有灯只能靠该种开关控制. 时间复杂度 \(O\left(nm\right)\). ...

  7. MySql学习笔记--详细整理--下

    目录 索引 测试索引 索引原则 权限管理和备份 备份 规范数据库设计 三大范式 JDBC JDBC程序 Statement对象 工具类实现 sql注入 PreparedStatement对象 事务 数 ...

  8. Java基础教程——BigDecimal类

    BigDecimal类 float.double类型的数字在计算的时候,容易发生精度丢失. 使用java.math.BigDecimal类可以解决此类问题. 前面讲过Math类,现在的BigDecim ...

  9. Beta冲刺随笔——Day_Ten

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 今日事今日毕 林涛: ...

  10. vue+element ctrl+s保存写法

    <el-input type="textarea" ref="inppp" v-model="values" placeholder= ...