我正在计划一个基于Python线程的项目。 每个线程都需要使用subprocess.Popen运行外部程序并收集一些输出。
作为副作用,外部程序可能会离开:
我无法为每个线程运行此清理,因为我没有办法将线程关联到其外部程序PID(此程序启动另一个程序)并且它是临时文件。
我正在寻找清理临时文件的最佳方法+杀死僵尸进程(我可以通过名称而不是通过PID找到它)在所有线程完成一次迭代之后,就在下一次迭代之前启动。
我知道这种清理会阻止所有线程,直到最后一个完成,但我可以忍受这种延迟。
你能提供一个简短的代码片段来证明这样的清理工作吗?
答案 0 :(得分:1)
好的,你真的有两件事需要注意:
我认为最好的方法是给每个工作线程一对事件(threading.Event()
),readycleanup和cleanupfinished。然后在工作线程中:
# ... main operation
self.readycleanup.set() # Still within loop
self.cleanupfinished.wait()
self.cleanupfinished.clear()
# End of loop
同时,在清理线程中:
for worker in workerthreads:
worker.readycleanup.wait()
do_cleanup_stuff()
for worker in workerthreads:
worker.readycleanup.clear()
worker.cleanupfinished.set()