소개
실리콘 밸리에서 14년 이상 소프트웨어 엔지니어를 하고 있습니다.
현재는 실리콘 밸리 대기업 애플 본사에서 빅데이터와 DevOps 관련일을 하는 엔지니어입니다.
강의
전체16수강평
- 이해하기 너무 쉽게 설명해주셔서 빠른 학습이 가능해요!
chiwooooo
2024.07.11
1
게시글
질문&답변
2024.07.10
product level에서 celeryd를 사용하시나요?
안녕하세요 bluebamus님, Production에서는 저는 이런식으로 사용하지 않고, https://github.com/dimz119/learn-celery/blob/main/django_celery/docker-compose.yml#L80 여기처럼 커맨드를 k8s command에서 돌려서 사용하거나, Supervisord를 사용해서 Docker안에서 돌리고 있습니다만, 각자만의 방식이 있고, 워낙 전체적으로 에러를 보면서 해야되기 때문에 제가 딱히 도움을 드릴 수가 없네요.
- 0
- 1
- 67
질문&답변
2024.07.09
강의 계획 관련
안녕하세요 권지원님, 일단은 디지털 광고에 대한 마지막 강의가 업데이트의 마지막일 것 같고, 부족한 부분이 있으면 피드백을 받아서 보충할 생각입니다.
- 2
- 2
- 110
질문&답변
2024.07.09
celery의 로그 설정을 django의 settings.py에서 따로 해줘야 하는게 있을까요?
안녕하세요 bluebamus님, 저는 보통 Celery를 k8s에서 각각의 worker pod으로 사용하고, Splunk나 다른 Log fowarder를 사용해 왔었는데, 인터넷에 찾아보니, 이런 자료들이 있네요. 말씀하신대로 CELERYD_HIJACK_ROOT_LOGGER를 False로 설정 하면 Celery가 기본 logger를 가져가서 사용하지 않습니다. 이를 통해 Django의 기본 로거 설정을 유지할 수 있습니다. 이 설정이 없으면 Celery가 root logger를 가로채서 Celery 자체의 로거로 사용하게 됩니다. 다음과 같이 사용하시면 될 듯 합니다. # settings.py CELERYD_HIJACK_ROOT_LOGGER = False LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': 'django_celery.log', }, }, 'loggers': { 'django': { 'handlers': ['console', 'file'], 'level': 'DEBUG', 'propagate': True, }, 'celery': { 'handlers': ['console', 'file'], 'level': 'DEBUG', 'propagate': True, }, }, } # celery.py import logging.config from django.conf import settings logging.config.dictConfig(settings.LOGGING) app = Celery('your_project_name') # your existing Celery settings # Ensure the logging configuration is used by Celery app.conf.update( worker_hijack_root_logger=False, )
- 1
- 1
- 65
질문&답변
2024.07.06
django에서 view나 api에서 request를 celery로 넘길 수 있을까요?
안녕하세요 bluebamus님, 저희도 비슷한 방법으로 사용은 하고 있는데, Django의 요청 객체인 request 를 Celery로 직접 넘길 수 없지만, 요청에서 필요한 데이터를 추출하여 Celery 작업에 전달하는 방식으로 문제를 해결하고 있습니다. 기본적인 방식은 다음과 같은데요? 요청 데이터 추출 : 요청 객체에서 필요한 데이터를 추출하여 Celery 작업에 전달합니다. Celery 작업 정의 : 추출한 데이터를 처리하는 Celery 작업을 정의합니다. Django 뷰/API에서 Celery 작업 호출 : 요청 데이터를 Celery 작업에 전달하고 비동기 작업을 시작합니다. 클라이언트 응답 처리 : Celery 작업이 완료된 후 결과를 클라이언트에게 응답으로 반환합니다 Django내에서는 delay 같은 것을 사용하셔서 Celery 작업을 시작하시고, task-result/ endpoint를 만드셔서 GET 요청을 보내 작업 결과를 조회하시면 될 듯 합니다. https://docs.celeryq.dev/en/stable/userguide/calling.html#basics 도움이 되셨을까요?
- 1
- 1
- 81
질문&답변
2024.07.06
child process에 lock/좀비 프로세스가 발생하면 어떻게 처리되나요?
안녕하세요 bluebamus님, Celery는 기본적으로 좀비 프로세스를 처리하기 위한 특정한 루틴을 제공하지 않지만, 작업이 제대로 종료되지 않거나 잠금(lock)으로 인해 문제가 발생하는 경우를 처리하기 위해 몇 가지 방법을 제공하고 있는데... timeout을 사용하지 않은 상태에서 방지할 수 있는 방법은 한계가 있을 수 있는데, Celery 워커의 maxtasksperchild 옵션을 설정하여 각 워커가 일정 수의 작업을 처리한 후 종료되고 새롭게 시작되도록 만들 수 있는데, 이는 메모리 누수와 좀비 프로세스를 방지하는 데 유용할 듯 하네요. https://celery.school/the-prefork-worker-pool#heading-maximum-number-of-tasks-per-child 외부 모니터링 도구를 사용하여 Celery 워커의 상태를 모니터링하고, 좀비 프로세스가 발견되면 이를 처리하는 스크립트를 실행할 수도 있습니다. 예를 들어, Supervisord, Monit, Systemd 등을 사용하여 워커 프로세스를 관리할 수 있습니다. 도움이 되었을까요?
- 1
- 1
- 65