【问题标题】:I want to stop a thread of squaring function in python but it is not working?我想停止 python 中的平方函数线程,但它不起作用?
【发布时间】:2019-09-16 16:31:40
【问题描述】:

我创建了一个平方函数,它将从 1,2 开始平方...当我输入“开始”时,当我输入“停止”时结束平方。 当我输入“开始”时,我每 2 秒后开始获取数字的平方,但是当我输入“停止”时,线程没有停止。我使用变量“标志”来停止函数。 这是代码。

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中添加global flag
  • 谢谢@CristiFati 现在,它的工作原理
  • while(True):改成while(flag==False):,然后就可以去掉if(flag): break了。

标签: python multithreading multitasking


【解决方案1】:

问题是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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 2022-01-13
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 2020-06-29
相关资源
最近更新 更多