1 使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到acquire和release方法之间。

1.1 对于Lock对象而言,如果一个线程连续两次进行acquire操作,那么第一次acquire之后没有release,第二次acquire将挂起线程。这会导致Lock对象永远不会release,使得死锁

1.2 RLock对象允许一个线程多次进行acquire操作,因为内部通过counter变量维护着线程acquire的次数。而且每一次的acquire操作必须有一个release操作与之对应。在所有release操作完成之后,别的线程才能申请RLock对象。

import threading

mylock = threading.RLock()

num=0

class myThread(threading.Thread):

def __init__(self, name):

threading.Thread.__init__(self,name=name)

def run(self):

global num

while True:

mylock.acquire()

print '%s locked, Number: %d'%(threading.current_thread().name, num)

if num>=4:

mylock.release()

print '%s released, Number: %d'%(threading.current_thread().name, num)

break

num+=1

print '%s released, Number: %d'%(threading.current_thread().name, num)

mylock.release()

if __name__== '__main__':

thread1 = myThread('Thread_1')

thread2 = myThread('Thread_2')

thread1.start()

thread2.start()

C:\Python27\python.exe F:/python_scrapy/python_study/Thread_RLock.py

Thread_1 locked, Number: 0

Thread_1 released, Number: 1

Thread_1 locked, Number: 1

Thread_1 released, Number: 2

Thread_2 locked, Number: 2

Thread_2 released, Number: 3

Thread_1 locked, Number: 3

Thread_1 released, Number: 4

Thread_2 locked, Number: 4

Thread_2 released, Number: 4Thread_1 locked, Number: 4

Thread_1 released, Number: 4

Process finished with exit code 0

全局解释器(GIL)

产生互拆锁限制线程对共享变量的访问,直到次数达到一定时才释放GIL

python 线程同步_python线程同步相关推荐

  1. python 线程同步_Python 线程同步

    zhoushixiong Python 线程同步 以下代码可以直观展示加锁和不加锁时,对数据修改情况. 加锁时 # -*-* encoding:UTF-8 -*- # author : shoushi ...

  2. python 判断线程状态_Python线程指南

    Python线程指南 本文介绍了Python对于线程的支持,包括"学会"多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例. 注意:本文基于Python2. ...

  3. python线程状态_Python线程

    1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...

  4. python 线程退出_python线程退出

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 如果某线程并未使用很多 io 操作, 它会在自己的时间片内一直占用处理器(和 g ...

  5. python线程状态_python 线程的五个状态

    当程序中包含多个线程时,CPU 不是一直被特定的线程霸占,而是轮流执行各个线程. 那么,CPU 在轮换执行线程的过程中,即从创建到消亡的整个过程,可能会历经 5 种状态,分别是新建.就绪.运行.阻塞和 ...

  6. python 判断线程状态_Python 线程和进程

    前言 学编程,谁没有为线程折腾过啊. 目录 线程与进程 线程与进程是操作系统里面的术语,简单来讲,每一个应用程序都有一个自己的进程. 操作系统会为这些进程分配一些执行资源,例如内存空间等. 在进程中, ...

  7. python结束线程类_Python线程指南(转)

    1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...

  8. python 获取子线程状态_python线程状态

    python怎么判断线程的状态 python中如何在父线程中检测其子线程是否处于运行状态 子线程有一个方法 is_alive() 运行时会返回Bool值True python 在线程函数中如何实现线程 ...

  9. python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...

    GIL锁 ​ 计算机有4核,代表着同一时间,可以干4个任务.如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的.但是单核永远肯定时串行的,它肯定是串行 ...

  10. python 线程池_Python线程池及其原理和使用(超级详细)

    系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 线程池在系统启动时即 ...

最新文章

  1. 标签之美三——超链接的嵌入
  2. [转载]VC轻松解析XML文件 - CMarkup类的使用方法
  3. python anaconda下载包_【Python开发】anaconda3 安装python包
  4. pve 不订阅更新_??“吃鸡”体验服已无更新,暗夜危机2.0或将被1款新游代替
  5. RHEL5.7下iptabels防火墙配置(下)
  6. Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换
  7. 在google map上显示Instagram的照片
  8. java mapreduce_通过简单的Word Count讲解MapReduce原理以及Java实现
  9. python opencv —— 背景提取(MOG、KNN)、识别与检测(Haar Cascade)
  10. Linux的目录ls命令
  11. 登录账号用户名判断_如何设计 QQ、微信等第三方账号登陆 ?
  12. 毕业设计/酒店管理系统
  13. 菜鸟教程:Js数据类型
  14. excel 小技巧——如何在每列后插入一列并指定内容(如何隔列插入一列并指定内容)
  15. android 跳转oppo应用中心_Android唤起应用商店并跳转到应用详情页
  16. Serverless 极致弹性解构在线游戏行业痛点
  17. 深度学习模型提升性能的策略
  18. 魔法阵c语言课程设计,魔法阵真的存在吗?
  19. ubuntu删除桌面快捷程序
  20. Python(求第五个人岁数)

热门文章

  1. 专访何红辉:谈谈Android源码中的设计模式
  2. OpenSource.com 评出 2014 年十佳开源软件
  3. HTTP协议之Content-Encoding - 天下无贼 - 51CTO技术博客
  4. msvcr80.dll 问题
  5. 组件化,插件化和热更新
  6. Android中常用适配器理解及使用
  7. 微信小程序-Image 图片实现宽度100%,高度自适应
  8. npm:no such file /usr/local/lib/node_modules/vue-cli/node_modules/get-stream
  9. 最大弹窗_你不在意的小弹窗,为什么总是出现问题?
  10. 安装mysql 错误重新安装