我想在python中停止平方函数的线程,但是不起作用?

时间:2019-04-27 10:56:31

标签: python multithreading multitasking

我创建了一个平方函数,从1,2开始平方...当我键入“开始”时结束平方,当我键入“停止”时结束平方。 当我键入“开始”时,每隔2秒我开始获得数字平方,但是当我键入“停止”时,线程并没有停止。我使用了变量“ flag”来停止该函数。 这是代码。

import threading
import time
flag=False
def square():
    i=1;
    global flag
    while(True):
        print(i*i,"\n")
        time.sleep(2)
        i=i+1
        if(flag):
            break

def main():
    while(True):
        x=input("Enter start/stop")
        if(x=="start"):
            flag=False
            p = threading.Thread(target=square)
            p.start()
        if(x=="stop"):
            flag=True
            p.join()

main()

1 个答案:

答案 0 :(得分:2)

问题在于,在 main 中定义和使用的 flag 变量是局部变量,与线程使用的变量无关,因此该线程永远不会更改通知(因此更新者知道何时该停止)。
修复很简单,在 main 中使变量成为全局变量(与在 square 中已经完成的方式相同):

global flag

square 函数也可以简化,而不是:

while True:
# The other instructions
if(flag):
    break

您可以这样做:

while not flag:
    # The other instructions

请注意,线程之间还有其他同步方式,例如

  • threading.Event
  • 将您的线程设置为 守护进程 p = threading.Thread(target=square, daemon=True),即使通常不建议这样做),这意味着它会在 main 时突然停止>即将结束

有关更多信息,请检查[Python 3.docs]: threading - Thread-based parallelism