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循环?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:如何结束另一个线程中的While循环?
基础教程推荐
猜你喜欢
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
