擅长:python、mysql、java
<p>正如@Tim Peters所说,在你的主线程中,你获取一个信号量,创建一个线程,释放这个信号量,然后重复这个过程200次,这不会将信号量的数量减少到0。在</p>
<p>如果你想控制创建的线程数,在主线程中,你应该先获取一个信号量,然后再创建一个线程。在线程例程的末尾,释放信号量,而不是由主线程完成。在</p>
<p>修改如下:</p>
<pre><code>#!/usr/bin/env python2.7
#coding: utf-8
import threading
import time
class Test:
#set the max thread number
threadLimiter = threading.BoundedSemaphore(10)
def go(self):
lstRecordThreads = []
for i in range(1, 200):
Test.threadLimiter.acquire()
recordThread = threading.Thread(target=self.recordExec, args=(i,))
recordThread.start()
lstRecordThreads.append(recordThread)
for rt in lstRecordThreads:
rt.join()
def recordExec(self, number):
print "current number=["+str(number)+"]"
time.sleep(1)
print "done=["+str(number)+"]"
print('Active thread count: %d' % (threading.active_count(),))
Test.threadLimiter.release()
if __name__ == '__main__':
t = Test()
t.go()
</code></pre>