水泥框架接收池工clos信号15

2024-06-15 08:48:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了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,但没用。目前我发现的唯一解决方案是完全忽略水泥应用程序配置中的信号(但这不是我真正喜欢的解决方案)。在


Tags: inpyselflock应用程序进程libusr
1条回答
网友
1楼 · 发布于 2024-06-15 08:48:29

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

相关问题 更多 >