我想在python中停止一个平方函数线程,但它不工作?

我想在python中停止一个平方函数线程,但它不工作?,python,multithreading,multitasking,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")

我已经创建了一个平方函数,它将从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()
问题在于main中定义和使用的标志变量是本地变量,与线程使用的标志变量无关,因此线程从未收到其更改的通知(因此更新的线程知道何时停止)
解决方法很简单,主要是将变量设置为全局变量(与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到达其末端时,它将突然停止

有关更多信息,请检查。

在main中添加一个
全局标志。
谢谢@CristiFati,它的工作将
while(True):
更改为
while(flag==False):
然后您可以删除
if(flag):break
@tusharrora:这回答了您的问题吗?