python while 循环中的 setState
setState in python while loop
我是 python 的新手,我正在尝试下面的代码。我在网络开发方面有一些经验,我们有“setState()”功能。我们在 python.
中有类似的功能吗?
下面是我的代码:
running = True
def updaterunning():
logger.info("running is set")
running = False
def func_function4():
logger.info("starting function 4")
timeout = time.time() +10
a=1
while time.time() <= timeout:
if running == True:
logger.info("function 4 : %s", a)
a+=1
time.sleep(1)
if a == 7:
updaterunning()
logger.info("exiting function 4")
f4 = threading.Thread(target = func_function4)
f4.start()
实际输出:
2021-06-26 22:57:01,604 - starting function 4
2021-06-26 22:57:01,609 - function 4 : 1
2021-06-26 22:57:02,623 - function 4 : 2
2021-06-26 22:57:03,637 - function 4 : 3
2021-06-26 22:57:04,652 - function 4 : 4
2021-06-26 22:57:05,663 - function 4 : 5
2021-06-26 22:57:06,675 - function 4 : 6
2021-06-26 22:57:07,686 - running is set
2021-06-26 22:57:07,688 - function 4 : 7
2021-06-26 22:57:08,696 - function 4 : 8
2021-06-26 22:57:09,703 - function 4 : 9
2021-06-26 22:57:10,718 - function 4 : 10
2021-06-26 22:57:11,736 - exiting function 4
预期输出:
2021-06-26 22:57:01,604 - starting function 4
2021-06-26 22:57:01,609 - function 4 : 1
2021-06-26 22:57:02,623 - function 4 : 2
2021-06-26 22:57:03,637 - function 4 : 3
2021-06-26 22:57:04,652 - function 4 : 4
2021-06-26 22:57:05,663 - function 4 : 5
2021-06-26 22:57:06,675 - function 4 : 6
2021-06-26 22:57:07,686 - running is set
2021-06-26 22:57:11,736 - exiting function 4
在这里,一旦我将 运行 设置为 False,我预计 If 条件 (If 运行 == True) 会失败并因此退出程序。但它继续执行。
这应该是一个简单的修复方法,但我不知道它的功能。感谢您的帮助。
当您在 updaterunning
函数中执行 running = False
时,它会设置一个名为 running
的局部变量;外部范围内的变量没有改变。
解决此问题的一种方法是使用全局变量,但 IMO 更好的解决方案是将此状态放入对象中。
class ThingDoer:
def __init__(self):
self.running = False
def updaterunning(self):
logger.info("running is set")
self.running = False
def func_function4(self):
logger.info("starting function 4")
self.running = True
timeout = time.time() +10
a = 1
while time.time() <= timeout:
if self.running == True:
logger.info("function 4 : %s", a)
a+=1
time.sleep(1)
if a == 7:
self.updaterunning()
logger.info("exiting function 4")
f4 = threading.Thread(target = ThingDoer().func_function4)
f4.start()
通过将此状态置于 class,您可以让多个 ThingDoer
并行运行而不会相互干扰(这会导致一些非常难以-调试行为),但如果你只想拥有一个 running
状态,你也可以通过让 ThingDoer 成为一个单身人士来做到这一点。
我是 python 的新手,我正在尝试下面的代码。我在网络开发方面有一些经验,我们有“setState()”功能。我们在 python.
中有类似的功能吗?下面是我的代码:
running = True
def updaterunning():
logger.info("running is set")
running = False
def func_function4():
logger.info("starting function 4")
timeout = time.time() +10
a=1
while time.time() <= timeout:
if running == True:
logger.info("function 4 : %s", a)
a+=1
time.sleep(1)
if a == 7:
updaterunning()
logger.info("exiting function 4")
f4 = threading.Thread(target = func_function4)
f4.start()
实际输出:
2021-06-26 22:57:01,604 - starting function 4
2021-06-26 22:57:01,609 - function 4 : 1
2021-06-26 22:57:02,623 - function 4 : 2
2021-06-26 22:57:03,637 - function 4 : 3
2021-06-26 22:57:04,652 - function 4 : 4
2021-06-26 22:57:05,663 - function 4 : 5
2021-06-26 22:57:06,675 - function 4 : 6
2021-06-26 22:57:07,686 - running is set
2021-06-26 22:57:07,688 - function 4 : 7
2021-06-26 22:57:08,696 - function 4 : 8
2021-06-26 22:57:09,703 - function 4 : 9
2021-06-26 22:57:10,718 - function 4 : 10
2021-06-26 22:57:11,736 - exiting function 4
预期输出:
2021-06-26 22:57:01,604 - starting function 4
2021-06-26 22:57:01,609 - function 4 : 1
2021-06-26 22:57:02,623 - function 4 : 2
2021-06-26 22:57:03,637 - function 4 : 3
2021-06-26 22:57:04,652 - function 4 : 4
2021-06-26 22:57:05,663 - function 4 : 5
2021-06-26 22:57:06,675 - function 4 : 6
2021-06-26 22:57:07,686 - running is set
2021-06-26 22:57:11,736 - exiting function 4
在这里,一旦我将 运行 设置为 False,我预计 If 条件 (If 运行 == True) 会失败并因此退出程序。但它继续执行。 这应该是一个简单的修复方法,但我不知道它的功能。感谢您的帮助。
当您在 updaterunning
函数中执行 running = False
时,它会设置一个名为 running
的局部变量;外部范围内的变量没有改变。
解决此问题的一种方法是使用全局变量,但 IMO 更好的解决方案是将此状态放入对象中。
class ThingDoer:
def __init__(self):
self.running = False
def updaterunning(self):
logger.info("running is set")
self.running = False
def func_function4(self):
logger.info("starting function 4")
self.running = True
timeout = time.time() +10
a = 1
while time.time() <= timeout:
if self.running == True:
logger.info("function 4 : %s", a)
a+=1
time.sleep(1)
if a == 7:
self.updaterunning()
logger.info("exiting function 4")
f4 = threading.Thread(target = ThingDoer().func_function4)
f4.start()
通过将此状态置于 class,您可以让多个 ThingDoer
并行运行而不会相互干扰(这会导致一些非常难以-调试行为),但如果你只想拥有一个 running
状态,你也可以通过让 ThingDoer 成为一个单身人士来做到这一点。