我有一些代码运行了两个工作进程,类似于以下内容:
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:我不应该以这种方式在信号处理程序中终止进程吗?