【发布时间】:2017-01-30 14:31:53
【问题描述】:
这段代码:
import multiprocessing as mp
from threading import Thread
import subprocess
import time
class WorkerProcess(mp.Process):
def run(self):
# Simulate long running task
self.subprocess = subprocess.Popen(['python', '-c', 'import time; time.sleep(1000)'])
self.code = self.subprocess.wait()
class ControlThread(Thread):
def run():
jobs = []
for _ in range(2):
job = WorkerProcess()
jobs.append(job)
job.start()
# wait for a while and then kill jobs
time.sleep(2)
for job in jobs:
job.terminate()
if __name__ == "__main__":
controller = ControlThread()
controller.start()
当我终止生成的 WorkerProcess 实例时。他们死得很好,但是子进程python -c 'import time; time.sleep(1000) 一直运行到完成。这是well documented in the official docs,但是如何杀死被杀死进程的子进程?
一个可能的灵魂可能是:
在 try/except 块中包装 WorkerProcess.run() 方法,捕获 SIGTERM,并终止
subprocess.call call。但我不确定如何在 WorkerProcess 中捕获 SIGTERM我也尝试在 WorkerProcess 中设置
signal.signal(signal.SIGINT, handler),但我得到 ValuError,因为它只允许在主线程中设置。
我现在该怎么办?
【问题讨论】:
标签: python python-multithreading python-multiprocessing