我需要运行一个(一系列)无限循环,该循环必须能够检查外部设置的条件以终止。我以为线程模块将允许这样做,但是到目前为止,我的努力失败了。这是我要执行的操作的一个示例:

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

最佳答案

您太早调用runForever了。使用不带括号的target = l.runForever

在调用函数的参数之前,不会对函数调用求值。当您编写runforever()时,它甚至在创建线程之前就立即调用该函数。通过仅传递runForever,就可以传递函数对象本身,线程装置准备就绪后可以调用该函数对象。关键是您实际上并不想调用runForever;您只想告诉线程代码runForever是稍后应调用的内容。

09-11 04:44