2009-11-16 114 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 !!!