Python threading issue, raw_input() blocks thread, runaway thread(Python线程化问题,RAW_INPUT()阻塞线程,失控线程)
本文介绍了Python线程化问题,RAW_INPUT()阻塞线程,失控线程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在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 est.py", line 37, in <module>
a.stop()
File "C:file est.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 ================================
在那里它一直打印出来,直到我重启终端。当我将RAW_INPUT()命令替换为threading.sleep()以暂停一段时间时,它会按预期工作。在我看来,RAW_INPUT()以某种方式阻止了foo()中的计时器执行。
为什么这不像我预期的那样工作?它是出于某种原因才应该这样工作的,还是我错过了什么?
如有任何帮助,我们将不胜感激。谢谢!
推荐答案
您的代码看起来很好,我可以在linux和Windows上运行。我认为您遇到了IDLE的解释器的局限性,它往往对基于multiprocessing和threading的代码都有问题。我只建议您不要尝试在空闲时间运行代码。
这篇关于Python线程化问题,RAW_INPUT()阻塞线程,失控线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:Python线程化问题,RAW_INPUT()阻塞线程,失控线程
基础教程推荐
猜你喜欢
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
