我需要运行一系列无限循环,必须能够检查外部设置的条件才能终止。我认为线程模块会允许这样做,但我的努力如此失败。这是我想要做的一个例子:
import threading
class Looping(object):
def __init__(self):
self.isRunning = True
def runForever(self):
while self.isRunning == True:
"do stuff here"
l = Looping()
t = threading.Thread(target = l.runForever())
t.start()
l.isRunning = False
我原本期望t.start在一个单独的线程中运行,l的属性仍然可以访问。这不是发生的事情。我在python shell(IPython)中尝试了上面的代码片段。在实例化之后立即执行t start并且它阻止任何进一步的输入。 很明显我对线程模块没有正确的看法。 有关如何解决问题的任何建议?
答案 0 :(得分:9)
您过早地致电runForever
。使用不带括号的target = l.runForever
。
在参数调用之后才会计算函数调用。当你编写runforever()
时,它会在创建线程之前调用该函数。只需传递runForever
,就可以传递函数对象本身,然后线程设备可以在准备就绪时调用它。关键是你实际上并不想调用runForever
;您只想告诉线程代码runForever
是它应该稍后调用的内容。