python多线程threading使用Semaphore或BoundedSemaphore实现并发限制

来源:互联网 发布:js获取div自定义属性 编辑:程序博客网 时间:2024/06/11 12:14

信号量:

class threading.Semaphore([value])
values是一个内部计数,values默认是1,如果小于0,则会抛出 ValueError 异常,可以用于控制线程数并发数

1.acquire([blocking])
2.release()

例如:
可用用来限制数据库的连接数

maxconnections = 5...pool_sema = BoundedSemaphore(value=maxconnections)pool_sema.acquire()conn = connectdb()... use connection ...conn.close()pool_sema.release()

例如:

# encoding: UTF-8import threadingimport timedef showfun(n):    print "%s start -- %d"%(time.ctime(),n)    print "working"    time.sleep(2)    print "%s end -- %d" % (time.ctime(), n)    semlock.release()if __name__ == '__main__':    maxconnections = 5    semlock = threading.BoundedSemaphore(maxconnections)    list=[]    for i in range(8):        semlock.acquire()        t=threading.Thread(target=showfun, args=(i,))        list.append(t)        t.start()

结果:

Sat May 27 02:43:00 2017 start -- 0workingSat May 27 02:43:00 2017 start -- 1workingSat May 27 02:43:00 2017 start -- 2workingSat May 27 02:43:00 2017 start -- 3workingSat May 27 02:43:00 2017 start -- 4workingSat May 27 02:43:02 2017 end -- 0Sat May 27 02:43:02 2017 end -- 1Sat May 27 02:43:02 2017 end -- 2Sat May 27 02:43:02 2017 end -- 3Sat May 27 02:43:02 2017 end -- 4Sat May 27 02:43:02 2017 start -- 5workingSat May 27 02:43:02 2017 start -- 6workingSat May 27 02:43:02 2017 start -- 7workingSat May 27 02:43:04 2017 end -- 5Sat May 27 02:43:04 2017 end -- 6Sat May 27 02:43:04 2017 end -- 7

线程数限制到5个,因此等待0-4完毕之后5-7才能请求到资源进行执行

阅读全文
0 0
原创粉丝点击