我想在下面的代码中限制数量class_f
同时运行的对象。即限制同时工作的线程数量。我怎样才能做到这一点 ?
#!/usr/bin/env python
import random
import time
from threading import Thread
list_num = [1,2,3,4,5,6,7,8,9,10]
class class_f(Thread):
def __init__(self,x):
Thread.__init__(self)
self.x = x
def run(self):
time.sleep(random.randint(0,1))
res = self.x * self.x
print str(res)+"\n"
def main():
for num in list_num:
c=class_f(num)
c.start()
if __name__ == "__main__":
main()
我建议使用有界信号量。
你可以像这样实现它:
maxThreads = 10
semaphore = threading.BoundedSemaphore(maxThreads)
然后在你的__init__
call sempahore.acquire()
在线程开始工作之前。当线程完成时调用sempahore.release()
。获取减少信号量中存储的数字。如果您尝试获取值为零的信号量,它将等待,直到信号量再次释放。看一眼Python中的线程同步机制Fredrik Lundh 更深入地解释了如何使用信号量.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)