如何在Python线程中运行和停止无限循环

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 start的执行立即开始并阻塞了任何进一步的输入。 显然,我对线程模块有所误解。 有没有关于如何解决这个问题的建议?

1个回答

11

您过早调用了runForever,请使用不带括号的target = l.runForever

函数调用是在其参数之后才计算的。当您写runforever()时,它会立即调用该函数,甚至在创建线程之前。通过仅传递runForever,您传递了函数对象本身,线程机制可以在准备好时调用它。重点是,您实际上并不想调用runForever;您只想告诉线程代码稍后应调用runForever


啊,括号。它们仍然让我困惑(我对Python的经验还不到一个月)。谢谢。 - stefano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接