2009-11-16 3 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() 

Этот код печати 'Hello' 10 раз но если я комментирую "сон (2)" печатает 'Hello' 5 раз.
В чем проблема с функцией sleep()? ИЛИ Где проблема? Я использую Python3000.Python резьб странное поведение

+0

Программа печатает «Привет» 5 раз для меня, независимо от того, является ли вызов 'sleep()' out-commented или нет. Поскольку вы создаете только 5 потоков, и каждый поток только печатает «Hello» один раз, я не вижу, как код может когда-либо печатать «Hello» более 5 раз. –

+0

Я тоже этого не вижу. [:-)] –

ответ

2

Похоже, вы столкнулись с проблемой, зарегистрированной в Python tuger 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) Спасибо. Кажется, мне нужно будет работать с более ранней версией на некоторое время. –

0

Я думаю, что вы нашли ошибку в Python 3 - я могу воспроизвести результаты, полученные под последним выпущенным Py 3.1, но с 2.6 результаты ожидаются (только пять строк испускаются в любом случае, хотя новые строки могут на удивление набирайте содержимое, которое входит в спецификации поточного поведения). Пожалуйста, откройте ошибку на bugs.python.org !!!

Смежные вопросы