在python编程过程中经常可能会使用到多线程的并发执行,下面简要简述一个并发的使用方式。
1. 示例
首先,开始一个示例
import threading
import time
def create_thread(thread_count):
threads = threading.BoundedSemaphore(thread_count)
print('BoundedSemaphore with %d threads' % thread_count)
return threads
def foo(var):
print("threadname[{0}] - var[{1}]".format(t.name, var))
time.sleep(2)
threads.release()
threads = create_thread(5)
for i in range(10):
threads.acquire()
t = threading.Thread(target=foo, args=(i,))
t.start()
2. 说明
2.1 BoundedSemaphore
一个工厂函数,返回一个新的有界信号量对象。一个有界信号量会确保它当前的值不超过它的初始值;如果超过,则引发ValueError
。在大部分情况下,信号量用于守护有限容量的资源。如果信号量被释放太多次,会出现异常。如果没有给出,value默认为1。
Semaphore
对象维护着一个内部计数器,调用acquire()
方法时该计数器减1,调用release()方法时该计数器加1,适用于需要控制特定资源的并发访问线程数量的场合。
调用acquire()
方法时,如果计数器已经为0则阻塞当前线程,直到有其他线程调用了release()
方法,所以计数器的值永远不会小于0。
Semaphore
对象可以调用任意次release()
方法,而BoundedSemaphore
对象可以保证计数器的值不超过特定的值。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持以下吧