那里。我正在创建一个程序并遇到一个令我困惑的问题和我对基本代码的理解(或者我对我的视力的理解)。
根据我的说法,这段代码应该打印出来
测试
在程序启动时立即启动,然后从Timer线程调用ext()时,循环变量将变为False,基本上在if语句中返回false,而不是继续打印出&#39; Test&#39;。< / p>
但即使调用了ext()(我测试了这个),if语句也会被调用,而循环不会变为False。
from threading import Timer, Thread
from time import sleep
loop = True
def hello():
while True:
if loop == True:
print('Test')
sleep(0.5)
def ext():
loop = False
th = Thread(target=hello)
th.start()
t = Timer(5, ext())
t.start()
请帮助,因为我已经坚持了几个小时。
答案 0 :(得分:0)
您需要将loop
指定为全局变量。在ext()
中,它认为您正在定义一个名为loop
的新变量,而您实际上想要修改全局变量。所以正确的代码就是这个:
from threading import Timer, Thread
from time import sleep
loop = True
def hello():
while True:
if loop == True:
print('Test')
sleep(0.5)
def ext():
global loop
loop = False
th = Thread(target=hello)
th.start()
t = Timer(5, ext)
t.start()
您还需要在最后一行之前更改一个而不是调用ext
将其传递给Timer
答案 1 :(得分:0)
你有两个问题......好吧,三个真的。首先,ext
引用一个名为loop
的局部变量,而不是全局变量。其次,你并没有真正启动线程,因为你调用了函数而不是传入它的引用。第三......当loop
被设置时你不再睡觉,所以你的代码最终会在一个紧凑的循环中吃掉一个完整的cpu。修复前两个是
from threading import Timer, Thread
from time import sleep
loop = True
def hello():
while True:
if loop == True:
print('Test')
sleep(0.5)
def ext():
global loop
loop = False
th = Thread(target=hello)
th.start()
t = Timer(5, ext)
t.start()