使用一個迴圈,不斷的建立線程,直到出現異常,才通知它們。python真是個好東西。
代碼如下:
#!/usr/bin/env python
#coding=gbk
import threading
import time, random, sys
class Counter:
def __init__(self):
self.lock = threading.Lock()
self.value = 0
def increment(self):
self.lock.acquire()
self.value = value = self.value + 1
self.lock.release()
return value
counter = Counter()
cond = threading.Condition()
class Worker(threading.Thread):
def run(self):
print self.getName(), "-- created."
cond.acquire()
#for i in range(10):
# pretend we're doing something that takes 10?00 ms
#value = counter.increment()
# time.sleep(random.randint(10, 100) / 1000.0)
cond.wait()
#print self.getName(), "-- task", "finished"
cond.release()
if __name__ == '__main__':
try:
for i in range(3500):
Worker().start() # start a worker
except BaseException, e:
print "異常: ", type(e), e
time.sleep(5)
print "maxium i=", i
finally:
cond.acquire()
cond.notifyAll()
cond.release()
time.sleep(3)
print threading.currentThread().getName(), " quit"
以下是python2.7在XP下的運行結果,可能跟具體的機器物理配置也有關係。
...........
Thread-1021 -- created.
Thread-1022 -- created. www.2cto.com
Thread-1023 -- created.
Thread-1024 -- created.
Thread-1025 -- created.
Thread-1026 -- created.
異常: <class 'thread.error'> can't start new thread
Thread-1027 -- created.
maxium i= 1027
MainThread quit