如何结束另一个线程中的While循环?

How to end a while loop in another Thread?(如何结束另一个线程中的While循环?)
本文介绍了如何结束另一个线程中的While循环?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想结束在另一个线程中的while True循环:

from time import sleep
from threading import Thread

condition = False

def check_sth():
    while True:
        if condition:
            print("Condition met, ending")
            break
        else:
            sleep(0.25)
            do_sth()  # Do something everytime the condition is not met

Thread(target=check_sth(), args=(,)).start()
sleep(2)
condition = False
#  Doesn't print "Condition met..."

或者有什么方法可以简单地kill创建线程,这样我就可以执行以下操作:

thread = Thread(target=check_sth(), args=(,))
thread.start()
thread.kill() # (?)

也欢迎使用asyncio或其他框架执行此操作的方法。

推荐答案

注意,您的代码在创建Thread时没有正确传递参数,并且不要将condition布尔变量设置为True

下面是如何修复能够停止另一个线程中的while循环的方法。它不是简单的布尔变量,而是使用Threading.Event对象来控制循环,并允许从主线程以线程安全的方式将其设置为真。

代码

from time import sleep
from threading import Event, Thread

condition = Event()

def do_sth():
    print("truckin' ...")

def check_sth():
    while not condition.is_set():
        sleep(0.25)
        do_sth()  # Do something everytime the condition is not set.

    print("Condition met, ending.")


Thread(target=check_sth, args=()).start()
sleep(2)
condition.set()  # End while loop.

输出

truckin' ...
truckin' ...
truckin' ...
truckin' ...
truckin' ...
truckin' ...
truckin' ...
truckin' ...
Condition met, ending.

这篇关于如何结束另一个线程中的While循环?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)