我想知道是否有一种简单易行的方法可以在一段时间内将布尔值设置为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秒继续运行一次......
有人对此有任何线索吗?
答案 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()