我遇到了python的水泥框架(目前使用python3)的问题。我有一个多进程应用程序,它使用python的Pool worker。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
有没有人知道为什么会发生这种情况,以及如何防止这种情况发生?在
谢谢
编辑:我应该加上我使用的是this question的多进程日志记录系统。我不知道是否有关联。在
编辑2:这是进程池的创建和终止:
^{pr2}$我试过用水泥的钩子系统来抓sigterm,但没用。目前我发现的唯一解决方案是完全忽略水泥应用程序配置中的信号(但这不是我真正喜欢的解决方案)。在
这是一个有根据的猜测:父进程在退出时杀死(
terminate()
s)已启动的进程。如果在父进程中调用pool.join()
,则父进程将等待直到所有子进程完成,并且不会向它们发送SIGTERM
。在相关问题 更多 >
编程相关推荐