使用一个循环,不断的创建线程,直到出现异常,才通知它们。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. 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 最终只能创建1027个线程。 我后来使用python2.5.2来测了一下,也只能创建1029个线程。 储位朋友有兴趣,可以使用它来测测不同平台下,最多能创建多少个线程。