2013-04-06 138 views
3

我需要运行一系列必须能够检查外部设置条件终止的无限循环。我认为线程模块可以做到这一点,但我的努力如此失败。这里是什么,我试图做一个例子:如何运行和停止python线程中的无限循环

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,并阻止任何进一步的输入。 显然,我对线程模块并不了解。 有关如何解决问题的任何建议?

回答

7

您打电话runForever太早。无括号使用target = l.runForever

函数调用直到其参数后才被计算。当你编写runforever()时,它甚至在创建线程之前就调用该函数。只需传递runForever即可传递函数对象本身,线程设备可以在准备就绪时调用它。要点是实际上并不想打电话runForever;你只是想告诉线程代码runForever是什么应该稍后调用。

+0

啊,parens。他们仍然绊倒我(我的Python使用经验还不到一个月)。谢谢 – stefano 2013-04-06 14:20:04