Python线程问题,原始输入()阻塞线程,失控线程
我在python中遇到了一个线程问题,问题似乎是当我调用一个线程时,随后调用raw_input()会阻塞该线程。这是一个最小的例子Python线程问题,原始输入()阻塞线程,失控线程,python,python-2.7,python-multithreading,Python,Python 2.7,Python Multithreading,我在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):
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 ================================
>
从现在开始
垃圾邮件,垃圾邮件,垃圾邮件
**几秒钟后,用户点击回车键**
回溯(最近一次呼叫最后一次):
文件“C:\File\test.py”,第37行,在
a、 停止()
文件“C:\File\test.py”,第28行,在stop中
self.task.cancel()
AttributeError:“踏步测试”对象没有属性“任务”
>>>垃圾邮件,垃圾邮件,垃圾邮件
垃圾邮件,垃圾邮件,垃圾邮件
垃圾邮件,垃圾邮件,垃圾邮件
垃圾邮件,垃圾邮件,垃圾邮件
垃圾邮件,垃圾邮件,垃圾邮件
垃圾邮件,垃圾邮件,垃圾邮件
垃圾邮件,垃圾邮件,垃圾邮件
=================================================重新启动================================
在我重新启动终端之前,它一直打印出来。当我将raw_input()命令替换为threading.sleep()以暂停一段时间时,它会按预期工作。在我看来,raw_input()以某种方式阻止了foo()中计时器的执行
为什么这不能像我预期的那样工作?是因为某种原因,它应该像这样工作,还是我遗漏了什么
任何帮助都将不胜感激。谢谢 您的代码看起来不错,在Linux和Windows上都适用于我。我认为您遇到了IDLE解释器的局限性,它往往在基于
的多处理
和线程
的代码方面都存在问题。我只是建议不要尝试在空闲状态下运行代码。Hmm,它在Windows和Linux上都可以正常工作。你想在什么环境下运行脚本?在Windows7上的Python2.7IdleShell下,我在Windows的标准PythonShell中尝试了它,它的工作原理与预期的一样。这个bug似乎是特定于IDLE的。