• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

如何使用python线程锁(实例解析)

python 搞代码 4年前 (2022-01-09) 23次浏览 已收录 0个评论

在这篇文章之中我们来了解一下什么是python线程锁。了解一下python线程锁的相关知识,以及线程锁在python编程之中能起到什么样的作用。

线程锁(互斥锁Mutex)

一个进程下可以启动多个线程,多个线程共享父进程的内存空间,也就意味着每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据,会出现什么状况?

锁的使用:

创建锁
mutex = threading.Lock()

锁定
mutex.acquire([timeout])

释放
mutex.release()

import timeimport threadingdef addNum():    global num #在每个线程中都获取这个全局变量    print('--get num:',num )    time.sleep(1)    num  -=1 #对此公共变量进行-1操作num = 100  #设定一个共享变量thread_list = []for i in range(100):    t = threading.Thread(target=addNum)    t.start()    thread_list.append(t)for t in thread_list: #等待所有线程执行完毕    t.join()    print('final num:', num )

正常来讲,这个num结果应该是0, 但在python 2.7上多运行几次,会发现,最后打印出来的num结果不总是0,为什么每次运行的结果不一样呢? 哈,很简单,假设你有A,B两个线程,此时都 要对num 进行减1操作,本文来源gao@dai!ma.com搞$代^码!网7 由于2个线程是并发同时运行的,所以2个线程很有可能同时拿走了num=100这个初始变量交给cpu去运算,当A线程去处完的结果是99,但此时B线程运算完的结果也是99,两个线程同时CPU运算的结果再赋值给num变量后,结果就都是99。那怎么办呢? 很简单,每个线程在要修改公共数据时,为了避免自己在还没改完的时候别人也来修改此数据,可以给这个数据加一把锁, 这样其它线程想修改此数据时就必须等待你修改完毕并把锁释放掉后才能再访问此数据。

注:不要在3.x上运行,不知为什么,3.x上的结果总是正确的,可能是自动加了锁

以上就是本篇文章所讲述的所有内容,这篇文章主要介绍了python互斥锁的相关知识,希望你能借助资料从而理解上述所说的内容。希望我在这片文章所讲述的内容能够对你有所帮助,让你学习python更加轻松。

更多相关知识,请访问搞代码Python教程栏目。

以上就是如何使用python线程锁(实例解析)的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何使用python线程锁(实例解析)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址