Python/Python 자료실

django-rq 오류 해결 - [__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called.

Chipmunks 2022. 2. 9.
728x90

안녕하세요, 다람쥐입니다.

스케쥴링 작업을 위해 django-rq 를 테스트하던 중에 아래와 같은 오류를 맞닥뜨렸습니다.

09:20:09 Worker rq:worker:2dd6fe37266942a3943c0f48ec900239: started, version 1.10.1
09:20:09 Subscribing to channel rq:pubsub:2dd6fe37266942a3943c0f48ec900239
09:20:09 *** Listening on default...
09:20:09 Trying to acquire locks for default
09:20:09 Cleaning registries for queue: default
09:20:09 Scheduler for default started with PID 58103
09:21:12 default: ~~~
objc[58202]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called.
objc[58202]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
09:21:12 Moving job to FailedJobRegistry (work-horse terminated unexpectedly; waitpid returned 6)

 

'work-horse terminated unexprectedly; waitpid returned 6' 예외를 보고서 구글링을 해보았을 때

메모리 영역이 꽉 차면 그럴 수도 있다고 나와 있었는데요.

마침 메모리가 꽉 찼길래 청소하고 다시 시도해봤더니 같은 오류가 발생했습니다.

 

그 위로 눈을 돌려 '[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called.' 오류를 검색해보았습니다.

다른 쓰레드와 fork() 함수가 같이 일어날 때 무언가 예외가 발생하는 듯 보이는데요.

 

아래 'OBJC_DISABLE_INITIALIZE_FORK_SAFETY' 환경 변수를 YES 로 설정하면 해결됩니다.

export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

 

도커 환경에서도 돌아가야 하므로 아래처럼 환경 변수를 설정했습니다.

# env for Redis Queue
ENV OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

 

 

댓글