python中的线程之semaphore信号量
2017-07-18 00:00
507 查看
semaphore是一个内置的计数器
计数器不能小于0,当计数器为0时,acquire()[b]将阻塞线程直到其他线程调用release()[/b]。
来看下面的代码:
执行结果:
可以看到,程序会在很短的时间内生成20个线程来打印一句话。
如果在主机执行IO密集型任务的时候再执行这种类型的程序时,计算机就有很大可能会宕机。
这时候就可以为这段程序添加一个计数器功能,来限制一个时间点内的线程数量。
代码如下:
执行结果:
每当调用acquire()时,内置计数器-1 每当调用release()时,内置计数器+1
计数器不能小于0,当计数器为0时,acquire()[b]将阻塞线程直到其他线程调用release()[/b]。
来看下面的代码:
import time import threading def foo(): time.sleep(2) #程序休息2秒 print("ok",time.ctime()) for i in range(20): t1=threading.Thread(target=foo,args=()) #实例化一个线程 t1.start() #启动线程
执行结果:
ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017
可以看到,程序会在很短的时间内生成20个线程来打印一句话。
如果在主机执行IO密集型任务的时候再执行这种类型的程序时,计算机就有很大可能会宕机。
这时候就可以为这段程序添加一个计数器功能,来限制一个时间点内的线程数量。
代码如下:
import time import threading s1=threading.Semaphore(5) #添加一个计数器 def foo(): s1.acquire() #计数器获得锁 time.sleep(2) #程序休眠2秒 print("ok",time.ctime()) s1.release() #计数器释放锁 for i in range(20): t1=threading.Thread(target=foo,args=()) #创建线程 t1.start() #启动线程
执行结果:
ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:44 2017 ok Tue Jul 18 20:04:44 2017 ok Tue Jul 18 20:04:44 2017 ok Tue Jul 18 20:04:44 2017 ok Tue Jul 18 20:04:44 2017
相关文章推荐
- python中的线程之semaphore信号量
- python基础-信号量Semaphore(进程_线程)、事件Event(进程_线程)
- 关于Python的进程线程协程之threading模块(二)Lock,RLock对象以及Semaphore,BoundedSemaphore对象
- 多线程第五篇 经典线程同步之信号量Semaphore
- java线程--信号量Semaphore
- 线程间同步之 semaphore(信号量)
- java多线程-Semaphore信号量使用 介绍 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源
- Windows中线程的基础知识和简单应用----信号量(Semaphore)
- JDK并发包---(7)允许多个线程同时访问的:信号量(Semaphore)
- Python进阶(3)_进程与线程中的lock(线程中互斥锁、递归锁、信号量、Event对象、队列queue)
- 多线程六 经典线程同步之信号量Semaphore
- Python threading.Semaphore 控制线程数
- java线程——信号量(Semaphore)+障栅(CyclicBarrier)
- 多线程六 经典线程同步之信号量Semaphore
- python 进行多线程编程,使用Semaphore控制线程数
- python多线程之semaphore(信号量)
- java线程同步的三种方法[synchronized关键字,Lock加锁,信号量Semaphore]
- 线程间同步之 semaphore(信号量)
- 线程之间的信号量 Semaphore
- [ Python - 12 ] 线程的信号量、标志位及队列