我遇到了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