如何结束作为os.system()调用运行的线程(Python)

时间:2016-04-22 16:58:44

标签: python multithreading terminate

我目前正在处理的项目适用于多个os.system()调用。我正在努力添加在后台运行这些调用的功能。这将启动一个新线程,调用os.system()并将所有输出重定向到/ dev / null。

问题在于我无法想出结束这些线程的最佳方法。当我在运行os.system()调用的线程上调用.join()时,系统调用只会收回主线程。我希望用户能够终止这些线程。

我的解决方案是启动一个线程,然后让该线程在另一个线程中启动os.system()调用。第一个子线程将持续检查True / False值。但后来我遇到了第一个子线程终止第二个子线程的问题,所以核心问题仍然存在。

以下是我的代码现在的模型:

import threading
import os

def a():
    os.system('ping www.stackoverflow.com > /dev/null')

threads = []

threads.append(threading.Thread(target=a))
threads[0].start()

#Continue doing other stuff

这里的问题是我无法想出一种稳定的方法来阻止这些线程。

1 个答案:

答案 0 :(得分:0)

听起来你可以能够使用守护进程,守护进程会在所有其他非守护进程线程关闭时自动停止。

for job in jobs_to_start:
  threads.append(threading.Thread(target=job))
  threads[-1].setDaemon(True)
  threads[-1].start()

你的主线程被os.system调用'接管',因为thread.join正是这样做的:等到线程完成,你的线程不会完成。

如果这对您不起作用,则有good answer here,显示如何使用subprocess.Popen进行系统调用并使用terminate停止。