python的线程锁
1、先看一个例子,一个进程可以起多个线程,多个线程都共享这个线程的内存 import threading
import time num = 100
thread_lock = threading.Lock()
'''
def add_func():
global num
print("Begin--->",num)
num -= 1
# thread_lock.release()
'''
#上面这段代码的结果,如果起100个线程去执行这个函数,那么第一个线程执行完后nun为99,这个时候第二个线程去拿num,拿到的值就是99,第三个线程拿到的值就是98....... '''
def add_func():
global num
print("Begin--->", num)
time.sleep(0.1)
num -= 1
'''
#上面这段代码的意思是,因为第一个线程和第二个线程之间有sleep,sleep后才去进行减操作,所以所有线程拿到的num的值都是100,最终执行的结果不是100-1,而是num-1,而这个num
#就是上一个线程执行完后的num的,所以我们看到所有线程拿到的值都是100,但是最后num的值确实0 #老师也没有讲清楚,上面的例子不加锁,结果也一直是正确的,但是在python2中,有时候会得到不一样的值,但是在python3则一直不会报错,为了避免出问题,我们可以对这个操作加锁 lock = threading.Lock()
#创建一个锁的实例 def add_func():
global num #获取公共变量num
print("Begin--->", num)
time.sleep(1)
print("after--->",num) #对下面的语句加锁或者获取一把锁,也就是同一个时间只有个线程可以执行下面的语句
lock.acquire()
num -= 1
# lock.release()
#用完之后就必须要释放锁,不然程序无法往下执行 thread_list = []
for i in range(100):
t = threading.Thread(target=add_func)
t.start()
time.sleep(1)
thread_list.append(t) for t in thread_list:
t.join() print("over--->",num)
python的线程锁的更多相关文章
- 孤荷凌寒自学python第四十天python 的线程锁RLock
孤荷凌寒自学python第四十天python的线程锁RLock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 因为研究同时在多线程中读写同一个文本文件引发冲突,所以使用Lock锁尝试同步, ...
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
- Python学习---线程锁/信号量/条件变量同步/线程池1221
线程锁 问题现象: 多线程情况下,CPU遇到阻塞会进行线程的切换,所以导致执行了tmp-=1的值还未赋值给num=tmp,另一个线程2又开始了tmp -=1,所以导致最后的值重复赋值给了num,所以出 ...
- Python多线程-线程锁
多线程修改一份数据时需要用到线程锁,以防止数据修改出错 #-*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import threa ...
- python with 线程锁
import threading import time num = 0 # 全局变量多个线程可以读写,传递数据 mutex = threading.RLock() # 创建一个锁 class Myt ...
- Python学习---线程/协程/进程学习 1220【all】
Python学习---线程基础学习 Python学习---线程锁/信号量/条件变量同步1221 Python学习---同步条件event/队列queue1223 Python学习---进程 1225 ...
- Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁
本节内容: 进程与线程区别 线程 a) 语法 b) join c) 线程锁之Lock\Rlock\信号量 d) 将线程变为守护进程 e) Event事件 f) queue队列 g) 生 ...
- python下线程以及锁
1.python多线程 #encoding=utf-8 """ python多线程,并非真正意义上的多线程 全局锁:在指定时间里,有且只有一个线程在运行 "&q ...
- Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯
本节内容: 异常处理.Socket语法.SocketServer实现多并发.进程和线程.线程锁.GIL.Event.信号量.进程间通讯.生产者消费者模型.队列Queue.multiprocess实例 ...
随机推荐
- JpGraph使用详解之中文乱码解决方法
在前面的JpGraph使用详解这篇文章,已经对JpGraph的使用方法作了详细的交代,前面说好的,接下来解决中文乱码. JpGraph为什么会出现中文乱码 在JpGraph中默认是要把字符串转成utf ...
- 在线学习和在线凸优化(online learning and online convex optimization)—FTRL算法6
- Hibernate hibernate.cfg.xml配置
数据库连接<required>: <property name="hibernate.connection.driver_class"> com.mysql ...
- JavaScript语句和异常
知识内容: 1.条件语句(分支语句) 2.循环语句 3.with语句 4.异常处理 5.本节练习 参考资料:<JavaScript高级程序设计> 1.条件语句 JavaScript中的条件 ...
- [Illuminate\Database\QueryException] SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using pas sword: NO) (SQL: select * from information_schema.tables where table_schema = la
[Illuminate\Database\QueryException] SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost ...
- centos7.3安装zend guard loader3.3 for php5.6
1 下载zend guard loader 到这里选择自己的系统版本 我选择的64位 for php5.6.3 linux http://www.zend.com/en/products/load ...
- openlayers3教材详解及demo(完整)
openlayers3教材详解及demo(完整) OpenLayers 3对OpenLayers网络地图库进行了根本的重新设计.版本2虽然被广泛使用,但从JavaScri ...
- eclipse 的project explorer问题,这个怎样把localFileSystem去掉
转自:https://zhidao.baidu.com/question/550279043.html
- SQL2014还原到2008
请使用with move选项来标识该文件的有效位置 sqlserver用命令还原数据库 restore database TT from disk='E:\test.bak' ...
- FireDACQuery FDQuery New
FDQuery FDQuery1->ChangeCount;也有UpdatesPending属性 FDQuery1->ApplyUpdates() ExecSQL('select * fr ...