Python 如何在线程中运行长方法时不断查询全局变量?

Python 如何在线程中运行长方法时不断查询全局变量?,python,multithreading,while-loop,Python,Multithreading,While Loop,现在我有一个程序可以创建3个线程并运行。它移动一个物理硬件。它运行的电机将继续向前移动,除非您告诉它停止,或者它遇到物理紧急停止。有时我不需要它继续运行,因为我有我需要的数据,如果电机继续运行,它会浪费时间和资源。我希望能够杀死所有3个线程(1个线程移动电机,1个线程使用激光雷达检查电机安装的距离,1个线程检查我们是否有我们需要的数据)。基本上,一旦我有了我需要的数据,我希望能够打破这一局面 我试过用类似的东西 self.stop = False while True: thread.st

现在我有一个程序可以创建3个线程并运行。它移动一个物理硬件。它运行的电机将继续向前移动,除非您告诉它停止,或者它遇到物理紧急停止。有时我不需要它继续运行,因为我有我需要的数据,如果电机继续运行,它会浪费时间和资源。我希望能够杀死所有3个线程(1个线程移动电机,1个线程使用激光雷达检查电机安装的距离,1个线程检查我们是否有我们需要的数据)。基本上,一旦我有了我需要的数据,我希望能够打破这一局面

我试过用类似的东西

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
in
run()

将您的解决方案与Artiom的结合起来,这实际上起到了作用。非常感谢。您可以查看这篇文章,它与您正在查找的内容直接相关