python 多线程并发

在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
喜欢就支持以下吧
点赞0
评论 抢沙发
Elvnik的头像-爱看否

昵称

取消
昵称表情代码图片