虽然真正的循环没有结束

时间:2015-03-30 19:28:55

标签: python loops

我有3个功能。 listener函数每隔10秒调用check_url函数。如果此函数在检查时成功,则调用destroy函数。在destroy函数完成它的工作后,我想终止listener我尝试使用finish_control变量

def listener(url):
    while True:
        if finish_control == 1:
            break
        check_url(url)
        sleep(10)

def check_url(url):
    print ("Status: Listening")
    response = urllib.request.urlopen(url)
    data = response.read()
    text = data.decode('utf-8')
    if text == '1':
        print("--Action Started!--")
        destroy(argv.location)

def destroy(location):
    #some work
    print("---Action completed!---")
    finish_control = 1

listener内的while循环不会终止。我也试过

while (finish_control == 0):

也有同样的问题。在destroy完成工作后如何让它停止?

2 个答案:

答案 0 :(得分:3)

确保全局定义finish_control,并在destroy函数中添加以下内容:

global finish_control

答案 1 :(得分:3)

问题是finish_control函数destroy是函数的本地函数。 finish_control中的listener不是同一个变量。解决这个问题的方法是return

中的值
  • destroy方法中添加一行[{1}}代替return 1
  • finish_control = 1
  • 之前添加return
  • destroy(argv.location)中接受,即listener

注意 - 请勿使用finish_control = check_url(url)因为它会导致安全漏洞