我目前正在处理的项目可以使用多个os.system()调用。我正在努力添加在后台运行这些调用的功能。这将启动一个新线程,调用 os.system() 并将所有输出重定向到/dev/null。
问题是我想不出结束这些线程的最佳方法。当我在运行 os.system() 调用的线程上调用 .join() 时,系统调用只是收回主线程。我希望用户能够终止这些线程。
我的解决方案是启动一个线程,然后让该线程在另一个线程中启动 os.system() 调用。第一个子线程将持续检查真/假值。但是后来我遇到了第一个子线程终止第二个子线程的问题,所以核心问题仍然存在。
这是我的代码现在的样子的模型:
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
这里的问题是我无法想出一种稳定的方法来停止这些线程。
守护程序,当所有其他非守护进程线程关闭时,守护进程将自动停止。
for job in jobs_to_start:
threads.append(threading.Thread(target=job))
threads[-1].setDaemon(True)
threads[-1].start()
您的主线程被os.system
调用"接管"thread.join
因为它正是这样做的:等到线程完成,而您的线程不会。
如果这对您不起作用,这里有一个很好的答案,展示了如何使用subprocess.Popen
进行系统调用并使用 terminate
停止它。