程序继续运行时,在一段时间内设置一个布尔值

时间:2017-08-17 03:05:25

标签: python multithreading timer boolean

我想知道是否有一种简单易行的方法可以在一段时间内将布尔值设置为True。之后,它回到了False。程序继续运行时所做的所有操作。

也许我可以用theads和计时器做到这一点?

E.g。

main()
decrease = Decrease()
decrease.run()

class Decrease()
  def __init__(self)
    self.value = 4
    self.isRunning = false

  def run(self)
    while True:
      self.checkIfValueIsDecreasing()
      time.sleep(2)


  def checkIfValueIsDecreasing(self)
    if self.value < 1
      self.isDecreasing = True
      time.sleep(60)
      self.isDecreasing = False

这只是一个快速的例子。但在这种情况下,我检查的是每2秒减少一次值。如果是,那么我将isDecreasing值设置为True 1分钟。

问题是程序没有继续运行。我希望run方法每2秒继续运行一次......

有人对此有任何线索吗?

2 个答案:

答案 0 :(得分:2)

我想你可以使用线程在后台运行Decrease.run方法。

d = Decrease()
t = threading.Thread(target=d.run)
t.daemon = True
t.start()

当然,您可以直接在Decrease.run方法中实现线程,例如:

class Decrease:
    def __init__(self):
        self.value = 4
        self.isDecreasing = False

    def run(self): 
        def run_thread():
            while True:
                self.checkIfValueIsDecreasing()
                time.sleep(2)
        t = threading.Thread(target=run_thread)
        t.daemon = True
        t.start()

答案 1 :(得分:1)

threading模块中有一个辅助函数可以完全按照您的要求运行,即Timer。这将在单独的线程中启动计时器,当Timer对象超时时,将调用预定义的函数。基于您的用例修改为工作并显示行为的示例将是:

import time
from threading import Timer

class Decrease():
    def __init__(self):
        self.value = 4
        self.isDecreasing = False

    def run(self):
        while True:
            self.checkIfValueIsDecreasing()
            time.sleep(2)
            if (self.isDecreasing):
                self.value += 1
            else:
                self.value -= 1
            print(self.value)

    def checkIfValueIsDecreasing(self):
        if self.value < 1:
            self.isDecreasing = True
            timer = Timer(60, self.timeOut)
            timer.start()

    def timeOut(self):
        self.isDecreasing = False

decrease = Decrease()
decrease.run()