Python 如何在线程中运行长方法时不断查询全局变量?
现在我有一个程序可以创建3个线程并运行。它移动一个物理硬件。它运行的电机将继续向前移动,除非您告诉它停止,或者它遇到物理紧急停止。有时我不需要它继续运行,因为我有我需要的数据,如果电机继续运行,它会浪费时间和资源。我希望能够杀死所有3个线程(1个线程移动电机,1个线程使用激光雷达检查电机安装的距离,1个线程检查我们是否有我们需要的数据)。基本上,一旦我有了我需要的数据,我希望能够打破这一局面 我试过用类似的东西Python 如何在线程中运行长方法时不断查询全局变量?,python,multithreading,while-loop,Python,Multithreading,While Loop,现在我有一个程序可以创建3个线程并运行。它移动一个物理硬件。它运行的电机将继续向前移动,除非您告诉它停止,或者它遇到物理紧急停止。有时我不需要它继续运行,因为我有我需要的数据,如果电机继续运行,它会浪费时间和资源。我希望能够杀死所有3个线程(1个线程移动电机,1个线程使用激光雷达检查电机安装的距离,1个线程检查我们是否有我们需要的数据)。基本上,一旦我有了我需要的数据,我希望能够打破这一局面 我试过用类似的东西 self.stop = False while True: thread.st
self.stop = False
while True:
thread.start()
if self.stop == True:
break
但在线程实际运行完成之前,它实际上不会命中if语句。我想要一种在变量发生变化时立即杀死这个线程的方法
def _move_helper(self):
while True:
if self.should_abort_immediately:
LOG.DEBUG("ABORTING")
return
self.position_hit = self.move.move_to_position(lab.PHONE_MOTOR, lab.PHONE_SCAN_POSITION, 10)
我还尝试了各种.join
螺纹连接,但这似乎对我没有帮助
我也尝试过这个我发现的例子
# Python program killing
# threads using stop
# flag
import threading
import time
def run(stop):
while True:
print('thread running')
if stop():
break
def main():
stop_threads = False
t1 = threading.Thread(target = run, args =(lambda : stop_threads, ))
t1.start()
time.sleep(1)
stop_threads = True
t1.join()
print('thread killed')
main()
我希望能够设置某种类或全局变量,允许我终止线程。在第二个示例中,将
stop_threads
置于main
之外(在模块范围内)。然后简单地将while True
更改为while not stop\u threads
inrun()
。将您的解决方案与Artiom的结合起来,这实际上起到了作用。非常感谢。您可以查看这篇文章,它与您正在查找的内容直接相关