代码之家  ›  专栏  ›  技术社区  ›  Pratik Deoghare

python线程奇怪的行为

  •  0
  • Pratik Deoghare  · 技术社区  · 15 年前
    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。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Ned Deily    15 年前

    看起来您遇到了python bug tracker中记录的问题。 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
    
        2
  •  0
  •   Alex Martelli    15 年前

    我认为您在python 3中发现了一个bug——我可以复制您在最新发布的py 3.1下运行的结果,但是有了2.6,结果就如预期的那样(两种方法都只发出了五行,尽管换行符会被意外地扭曲线程行为规范中的内容)。请在 bugs.python.org !!!!