Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1005058
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: Python/Ruby

2013-07-29 09:46:01

使用一个循环,不断的创建线程,直到出现异常,才通知它们。python真是个好东西。

代码如下:


  1. #!/usr/bin/env python  
  2. #coding=gbk  
  3.   
  4. import threading  
  5. import time, random,  sys  
  6.   
  7. class Counter:  
  8.     def __init__(self):  
  9.         self.lock = threading.Lock()  
  10.         self.value = 0  
  11.   
  12.     def increment(self):  
  13.         self.lock.acquire()   
  14.         self.value = value = self.value + 1  
  15.         self.lock.release()  
  16.         return value  
  17.   
  18. counter = Counter()  
  19. cond = threading.Condition()  
  20.   
  21. class Worker(threading.Thread):  
  22.   
  23.     def run(self):  
  24.         print self.getName(),  "-- created."  
  25.         cond.acquire()  
  26.         #for i in range(10):  
  27.             # pretend we're doing something that takes 10?00 ms  
  28.             #value = counter.increment()   
  29.             # time.sleep(random.randint(10, 100) / 1000.0)  
  30.         cond.wait()  
  31.         #print self.getName(), "-- task", "finished"   
  32.         cond.release()  
  33.           
  34.   
  35.   
  36. if __name__ == '__main__':  
  37.       
  38.         try:  
  39.             for i in range(3500):  
  40.                 Worker().start() # start a worker  
  41.         except BaseException,  e:  
  42.             print "异常: ", type(e),  e  
  43.             time.sleep(5)  
  44.             print "maxium i=",  i  
  45.         finally:  
  46.             cond.acquire()  
  47.             cond.notifyAll()  
  48.             cond.release()  
  49.             time.sleep(3)  
  50.             print threading.currentThread().getName(),  " quit"  

以下是python2.7在XP下的运行结果,可能跟具体的机器物理配置也有关系。



  1. ...........  
  2. Thread-1021 -- created.  
  3. Thread-1022 -- created.  
  4. Thread-1023 -- created.  
  5. Thread-1024 -- created.  
  6. Thread-1025 -- created.  
  7. Thread-1026 -- created.  
  8. 异常:   can't start new thread  
  9. Thread-1027 -- created.  
  10. maxium i= 1027  
  11. MainThread  quit  

最终只能创建1027个线程。


我后来使用python2.5.2来测了一下,也只能创建1029个线程。

储位朋友有兴趣,可以使用它来测测不同平台下,最多能创建多少个线程。

阅读(1929) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~