대용량 (예약 된) 태스크가 짧은 시간 동안 엄청난 양의 메모리를 소비하지만 작업자 프로세스가 풀 수명 (MAX_TASKS_PER_CHILD=None
)으로 인해 생기는 Python Celery (다중 프로세싱 사용)에 문제가 있습니다. 메모리가 가비지 수집되지 않습니다 (예 : "높은 물"예약 됨).다중 처리 : 포킹의 단점?
(이 문제는 더욱 성능이 저하 메모리 할당 많은 일정 금액을보고 스왑으로 바뀝니다 Heroku가,에 의해 악화된다.) 우리는 MAX_TASKS_PER_CHILD=1
를 설정하여, 우리는 새로운 포크 것을 발견했다
프로세스 (셀러리 작업자 인스턴스)마다 작업이 완료되고 메모리가 제대로 가비지 수집됩니다. 단!
그러나 동일한 솔루션을 제안하는 기사는 많이 있지만 단점은 확인하지 못했습니다. 모든 작업 후에 새 프로세스를 포킹 할 때 잠재적 인 단점은 무엇입니까?
내 추측은 다음과 같습니다 제외
1. CPU 오버 헤드 (그러나 아마 작은 양) 분기 때
2. 잠재적 인 오류 (하지만이에 대한 모든 문서를 찾을 수 없습니다)