我遇到了python水泥框架问题(此时使用python3)。我有一个使用python的Pool worker的多进程应用程序。每multiporcessing部分我stdout中充满了一个或一个以上这些异常的结束(它不DEOS影响测试结果的):水泥框架接收池员关闭信号15关闭
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多进程日志系统日志记录。我不知道是否有任何关联。
EDIT2:这是程序池创建和终止:
pool = Pool(processes=core_num)
pool.map(worker_unpacker.work, formatted_input)
pool.close()
t2 = time.time()
我试着追赶与水泥的钩子系统SIGTERM,但它不工作。我目前发现的唯一解决方案是实际上完全忽略了水泥应用配置中的信号(但它并不是我喜欢的解决方案)。
信号15是'SIGTERM',如果你发送kill信号给进程,你在进程上运行terminate()吗?你可以分享你设置游泳池的程序部分,运行并“加入”它吗? – hansaplast
@hansaplast谢谢,是的,我明白这是sigterm。我并不真正知道的是谁生成它,为什么它不被Cement所捕获(即使我明确地设置钩子)。 – ClonedOne