4

我需要运行一个(一系列)无限循环,该循环必须能够检查外部设置的条件以终止。我认为线程模块会允许这样做,但我迄今为止的努力都失败了。这是我正在尝试做的一个例子:

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 在实例化后立即开始执行,它会阻止任何进一步的输入。很明显,我对线程模块有些不理解。关于如何解决问题的任何建议?

4

1 回答 1

11

你打电话runForever太早了。使用target = l.runForever不带括号。

一个函数调用直到它的参数被评估之后才会被评估。当您编写runforever()时,它会立即调用该函数,甚至在创建线程之前。通过仅传递runForever,您传递了函数对象本身,线程设备可以在准备好时调用它。关键是实际上并不想打电话runForever;您只想告诉线程代码稍后应该调用runForever

于 2013-04-06T06:17:42.463 回答