一、允许一个资源最多由几个线程同时进行

命令行:threading.Semaphore(个数)

代表现在最多有几个线程可以进行操作

importthreadingimporttime#参数定义了最多几个线程可以使用资源

semaphore= threading.Semaphore(3)#这里就是指最多有三个线程可以进行操作

deffunc():ifsemaphore.acquire():for i in range(2):print(threading.current_thread().getName() + "get semapore")

time.sleep(5)

semaphore.release()print(threading.current_thread().getName() + "release semaphore")for i in range(8):

t1= threading.Thread(target=func,args=())

t1.start()

二、Timer讲解

格式:threading.Timer(时间间隔,函数)

代表这个函数在“时间间隔”的时间之后启动

deffunc2():print("I am running.....")

time.sleep(3)print("I an done.......")if __name__ == "__main__":

t2= threading.Timer(6,func2) #代表6秒之后开始启动线程func2

t2.start()

i=0whileTrue:print("{0}*********".format(i))

time.sleep(3)

i+= 1

三、可重入锁

1.一个锁可以被一个线程多次申请

2.主要解决递归调用的时候哦,需要申请锁的情况,可以防止被锁住,重新申请

classMyThread(threading.Thread):defrun(self):globalnum

time.sleep(1)if mutex.acquire(1):

num= num+1msg= self.name + "set num to"+str(num)print(msg)

mutex.acquire()

mutex.release()

mutex.release()deftest():for i in range(5):

t3=MyThread()

t3.start()if __name__ == "__main__":

num=0

mutex= threading.RLock()#可重入锁

test()

解释:我们的线程可以直接进行,不会因为一个申请了,就会被阻塞,依然还可以申请这把锁

四、源码

d25_4_Rlock.py

https://github.com/ruigege66/Python_learning/blob/master/d25_4_Rlock.py

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,后台回复”礼包“,获取大数据学习资料

python限制进程数_Python连载36-线程数量限制、Timer、可重入锁相关推荐

  1. 第14章 多线程(3) 线程并发问题与可重入锁

    前言 这是线程真正开始变得有意思的部分,各位学习前面的概念头昏脑胀了没?是时候来玩一玩了.线程同步是什么呢? 相当于一个很有意思的游戏,玩的好的随手编辑几句,性能杠杠的,众人惊为天人,纷纷膜拜(心中O ...

  2. python如何使用多线程_python多线程与线程

    进程与线程的概念 进程 考虑一个场景:浏览器,网易云音乐以及notepad++ 三个软件只能顺序执行是怎样一种场景呢?另外,假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I ...

  3. python锁有哪几种_python 可重入锁有什么用?

    可重入锁:支持在同一线程中多次请求同一资源 import threading import time class MyThread(threading.Thread): def run(self): ...

  4. python多线程编程(4): 死锁和可重入锁

    From: http://www.cnblogs.com/holbrook/archive/2012/03/08/2385449.html 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并 ...

  5. java 变量锁_并发编程高频面试题:可重入锁+线程池+内存模型等(含答案)

    对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一.因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统.内存.CPU.编程语言等多方面的基础能力,更为考验一个程序 ...

  6. 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池

    并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...

  7. 【并发编程】线程锁--Synchronized、ReentrantLock(可重入锁)

    在说锁之前,我们要明白为什么要加锁,不加锁会怎样? 在并发编程中,很容易出现线程安全问题,接下来我们看个很经典的例子--银行取钱,来看一下有关线程安全的问题. 取钱的流程可以分为一下几个步骤: 1.用 ...

  8. python threading lock_python threading之死锁和可重入锁

    一.死锁 简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况. 1.迭代死锁 该情况是一个线程"迭代"请求同一个资源 ...

  9. python学习笔记-死锁与递归锁(可重入锁)

    本文为了说明例子,用中文作为变量写在了程序里面,一般编程最好不要那么写 本文目录 死锁 递归锁(可重入锁) 代码实现 死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成 ...

最新文章

  1. php获取等于符号后面的参数,php获取URL中带#号等特殊符号参数的解决方法
  2. 很好的FireFox addin
  3. TaintDroid深入剖析之启动篇
  4. powershell 备份文件脚本
  5. CodeForces - 1335E2 Three Blocks Palindrome (hard version)(思维)
  6. 别再无脑wwm了!在下游任务中不一定有效!
  7. Linux内核中流量控制(4)
  8. Java任务调度框架Quartz教程实例
  9. git cherry-pick合并某个commit
  10. 30个Eclipse键盘快捷键大全,让你工作效率翻倍
  11. 云脉档案管理系统助力档案信息化建设
  12. Antd组件库的使用
  13. linux添加163邮箱,centos 7 mailx配置163邮箱发送邮件
  14. 【SVN】windows SVN安装使用教程(服务器4.3.4版本/客户端1.11.0版本)
  15. 22岁俄罗斯“天才少女”加入华为!曾获「编程界奥赛」冠军!
  16. 认认真真推荐9个高质量公众号
  17. php网页转html网页怎么弄
  18. win7的虚拟机版优化
  19. String字符串GBK转UTF8
  20. 杠杆炒股利息一般是多少

热门文章

  1. C语言中 e3是什么意思,fib在c语言中是什么意思?
  2. java 多态 ppt下载_java继续多态.ppt
  3. Windows Docs
  4. PHP开发微信小程序推广解决方案
  5. VR实景导航拯救“路痴焦虑症”
  6. 自律的人比随性的人更优秀吗?
  7. NUnit使用详解(一)
  8. 超级课程表原理解析(如何获取网页内容)
  9. 在外租房子,切记九点
  10. QQ手机精灵 http://www.apkbus.com/blog-33641-44366.html