Python 水泥框架在水池工人关闭时收到信号15

Python 水泥框架在水池工人关闭时收到信号15,python,exception,multiprocessing,signals,python-multiprocessing,Python,Exception,Multiprocessing,Signals,Python Multiprocessing,我在python的水泥框架(目前使用的是python3)方面遇到了一个问题。我有一个使用python的池工作者的多进程应用程序。A在每个多端口部分的末尾(不干扰结果),我的标准输出被以下一个或多个异常填充: Traceback (most recent call last): File "/usr/lib/python3.5/multiprocessing/util.py", line 254, in _run_finalizers finalizer() File "/usr/

我在python的水泥框架(目前使用的是python3)方面遇到了一个问题。我有一个使用python的池工作者的多进程应用程序。A在每个多端口部分的末尾(不干扰结果),我的标准输出被以下一个或多个异常填充:

Traceback (most recent call last):
  File "/usr/lib/python3.5/multiprocessing/util.py", line 254, in _run_finalizers
    finalizer()
  File "/usr/lib/python3.5/multiprocessing/util.py", line 186, in __call__
    res = self._callback(*self._args, **self._kwargs)
  File "/usr/lib/python3.5/multiprocessing/queues.py", line 198, in _finalize_join
    thread.join()
  File "/usr/lib/python3.5/threading.py", line 1054, in join
    self._wait_for_tstate_lock()
  File "/usr/lib/python3.5/threading.py", line 1070, in _wait_for_tstate_lock
    elif lock.acquire(block, timeout):
  File "/home/yogaub/.virtualenvs/seminar/lib/python3.5/site-packages/cement/core/foundation.py", line 123, in cement_signal_handler
    raise exc.CaughtSignal(signum, frame)
cement.core.exc.CaughtSignal: Caught signal 15
有人知道为什么会发生这种情况,以及如何预防吗

谢谢

编辑:我应该补充一点,我正在使用的多进程日志系统进行日志记录。我真的不知道是否有任何关联

edit2:这是进程池的创建和终止:

pool = Pool(processes=core_num)
pool.map(worker_unpacker.work, formatted_input)
pool.close()
t2 = time.time()

我试着用水泥钩系统抓住西格特姆,但不起作用。目前我找到的唯一解决方案是完全忽略水泥应用程序配置中的信号(但这不是我真正喜欢的解决方案。)

这是一个有根据的猜测:父进程在退出时终止(
terminate()
s)已启动的进程。如果在父进程中调用
pool.join()
,则父进程将等待所有子进程完成,并且不会向它们发送
SIGTERM

信号15是
SIGTERM
,如果向进程发送kill信号,则会发生这种情况,是否在进程上运行
terminate()
?你能分享程序中设置池、运行和加入池的部分吗?@hansaplast谢谢,是的,我知道是sigterm。我真的不知道是谁产生的,为什么它没有被水泥抓住(即使我明确地设置了钩子)。谢谢!对
pool.join()的显式调用成功了。然而,这很奇怪,因为python文档声明
close()会阻止更多任务提交到池中。一旦所有任务都完成,辅助进程将退出。
但水泥钩没有捕捉到它仍然让我有点不安。是的,当父进程调用
close()
并且某个进程完成该函数时,它会正常退出。您遇到的问题是,父进程没有等待太长时间,在工作进程完成之前,它已经自行退出。可以这么说,这件事把和他在一起的工人都撕成了死尸
join()
明确地告诉父进程在所有子进程完成之前等待exiting@ClonedOne如果你想得到更多的解释,请这么说,我已经尽力了:-)