在python多处理中使用信号终止子进程

时间:2015-02-19 03:42:57

标签: python linux signals python-multiprocessing

我有一些代码运行了两个工作进程,类似于以下内容:

for queue in queues:
   process = multiprocessing.Process(name=queue.name, target=worker, args=(args,))

我将此特定程序转换为守护程序,因此我还注册了一些信号处理程序来捕获SIGTERM,因此父进程可以确保子进程终止。像这样:

signal.signal(signal.SIGTERM, cleanup)

def cleanup(signal, frame)
  for job in jobs:
    if job.is_alive():
      job.terminate()
  sys.exit(0)

我这样做时会出现一些奇怪的错误,包括"只能测试子进程"以及" KeyError in module' threading&#39 ;"

如果没有发布完整的堆栈(这很长),我的处理方式是否存在根本性的错误? IE:我不应该以这种方式在信号处理程序中终止进程吗?

0 个答案:

没有答案