시멘트 프레임 워크에서 파이썬 (현재 python3 사용)에 문제가 있습니다. 파이썬 풀 작업자를 사용하는 다중 프로세스 응용 프로그램이 있습니다. 내 표준 출력은 이러한 예외 중 하나 이상으로 가득 모든 multiporcessing 섹션의 끝 (이 결과에 방해가되지 DEOS는) : 시멘트 프레임 워크에서 풀에서 작업자 신호 닫기를 수신합니다.
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 :이 프로세스 풀 생성 및 종료입니다 : 내가 시멘트의 후크 시스템과 SIGTERM을 잡기 시도했습니다
pool = Pool(processes=core_num)
pool.map(worker_unpacker.work, formatted_input)
pool.close()
t2 = time.time()
그러나 그것은 작동하지 않습니다. 내가 발견 한 유일한 해결책은 실제로 시멘트 앱 구성에서 신호를 완전히 무시하는 것입니다 (하지만 실제로는 제가 좋아하는 해결책은 아닙니다).
시그널 15는'SIGTERM'이며 프로세스에 kill 시그널을 보내면 프로세스에서'terminate()'를 실행하고 있습니까? 풀을 설정하고 실행하고'join '하는 프로그램의 부분을 공유 할 수 있습니까? – hansaplast
@hansaplast 고마워, 네, 이해 해요. 내가 실제로 모르는 것은 그것을 누가 생성하고 왜 시멘트에 의해 잡히지 않는지 (심지어 명시 적으로 후크를 설정했을 때조차도). – ClonedOne