Python Threading странное поведение - PullRequest
0 голосов
/ 16 ноября 2009
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 раз , но если я комментирую «sleep (2)», он печатает «Hello» 5 раз.
В чем проблемы с функцией сна ()? ИЛИ Где проблема? Я использую Python3000.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2009

Похоже, вы столкнулись с проблемой, задокументированной в трекере ошибок Python выпуск 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 голосов
/ 16 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...