簡體   English   中英

Python線程問題,raw_input()阻塞線程,失控線程

[英]Python threading issue, raw_input() blocks thread, runaway thread

我在python中遇到線程問題,問題似乎是當我調用線程時,隨后調用raw_input()會阻塞線程。 這是最小的例子

import threading
import time

class tread_test(threading.Thread):
    def __init__(self):
        self.running = True
        threading.Thread.__init__(self)
    #

    def run(self):
        self.foo()
    #

    def foo(self):
        print "Spam, Spam, Spam"
        self.task = threading.Timer(0.5, self.foo)
        self.task.start()
    #

    def stop(self):
        self.running = False
        self.task.cancel()
    #
#

if __name__ == "__main__":
    a = tread_test()
    print "Starting now"
    a.start()
    raw_input()
    a.stop()
    print "Stopping now"

我對此的期望是:

Starting now
Spam, Spam, Spam
Spam, Spam, Spam
Spam, Spam, Spam
** user hits enter **
Stopping now

這就是給我的:

>>> 
Starting now
Spam, Spam, Spam

** After several seconds user hits enter **

Traceback (most recent call last):
  File "C:\file\test.py", line 37, in <module>
    a.stop()
  File "C:\file\test.py", line 28, in stop
    self.task.cancel()
AttributeError: 'tread_test' object has no attribute 'task'
>>> Spam, Spam, Spam
Spam, Spam, Spam
Spam, Spam, Spam
Spam, Spam, Spam
Spam, Spam, Spam
Spam, Spam, Spam
Spam, Spam, Spam
================================ RESTART ================================

在我重新啟動終端之前,它一直在打印。 當我用threading.sleep()替換raw_input()命令以暫停一段時間時,它按預期工作。 在我看來,raw_input()某種程度上阻止了foo()中的Timer執行。

為什么這沒有按我預期的那樣工作? 是否應該出於某種原因像這樣工作,還是我錯過了一些東西?

任何幫助,將不勝感激。 謝謝!

您的代碼看起來不錯,並且可以在Linux和Windows上使用。 我認為您遇到了IDLE解釋器的局限性,該解釋器往往在multiprocessing和基於threading的代碼方面都存在問題。 我只是建議不要嘗試在IDLE中運行您的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM