2009-11-16 111 views
0
from threading import * 
from time import * 

class MyThread(Thread): 
    def __init__(self,x): 
     self.x = x 
     Thread.__init__(self) 
    def run(self): 
     sleep(2) 
     print(self.x) 

if __name__=='__main__':  
    threads = [] 
    for i in range(5): 
     threads.append(MyThread('Hello')) 

    for i in range(5): 
     threads[i].start() 

    for i in range(5): 
     threads[i].join() 

此代码打印“你好” 10倍,但如果我的评论“睡眠(2)”它打印“你好” 5倍。
sleep()函数有什么问题?或问题在哪里? 我正在使用Python3000。Python的线程奇怪的行为

+0

程序为我打印'Hello'5次,无论'sleep()'调用是否被注释掉。由于您只创建5个线程,每个线程只打印一次“Hello”,所以我不会看到代码如何打印超过5次的“Hello”。 – 2009-11-16 06:54:53

+0

我也没有看到它。 [:-)] – 2009-11-16 07:24:23

回答

2

看起来您已经遇到了Python bug跟踪器issue 6750中记录的问题。该问题的修复将被检入,并将出现在Python 3.1的下一个维护版本中(如果有的话)或Python 3.2中。

$ python3.1 test_thread.py 
Hello 
Hello 
Hello 
Hello 
Hello 
Hello 
Hello 
$ python3.2 test_thread.py 
Hello 
Hello 
Hello 
Hello 
Hello 
+0

(+ 1A)谢谢。看起来好像我不得不在早期版本上工作一段时间。 – 2009-11-16 10:31:55

0

我认为你已经发现了Python 3中的一个错误 - 我可以重现在最新发布的Py 3.1下运行的结果,但是2.6的结果与预期相同(只有五行发出任何一种方式,尽管换行符可以令人吃惊的是,这些内容是在线程行为的规范内)。请打开一个错误在bugs.python.org !!!