[PYTHON] Celery (celerybeat)에 정기적 인 태스크를 동적으로 추가 / 제거하는 방법
PYTHONCelery (celerybeat)에 정기적 인 태스크를 동적으로 추가 / 제거하는 방법
다음과 같이 정의 된 함수가있는 경우 :
def add(x,y):
return x+y
동적으로 셀러리 PeriodicTask로서이 함수를 추가하고 런타임에 그것을 킥 오프하는 방법이 있습니까? 나는 (의사 코드)와 같은 것을 할 수 있기를 바란다.
some_unique_task_id = celery.beat.schedule_task(add, run_every=crontab(minute="*/30"))
celery.beat.start(some_unique_task_id)
나는 멈추거나 (pseudocode)와 같은 것으로 동적으로 그 태스크를 제거하기를 원할 것이다 :
celery.beat.remove_task(some_unique_task_id)
또는
celery.beat.stop(some_unique_task_id)
참고 저는 장고 관리를 통해 정기적 인 작업을 관리 할 수있는 djcelery를 사용하지 않습니다.
해결법
-
==============================
1.아뇨, 미안 해요, 이건 일반 샐러리 비트로는 불가능합니다.
아뇨, 미안 해요, 이건 일반 샐러리 비트로는 불가능합니다.
하지만 원하는대로 쉽게 확장 할 수 있습니다 (예 : 장고 - 샐러리 스케줄러는 데이터베이스에 일정을 읽고 쓰는 하위 클래스입니다. (위에 몇 가지 최적화가 있음).
또한 Django 프로젝트가 아닌 경우에도 장고 - 셀러리 스케줄러를 사용할 수 있습니다.
이 같은:
또한 비 장고 프로젝트에 사용할 수있는 djcelerymon 명령이 있습니다. Celerycam과 Django Admin 웹 서버를 동일한 프로세스에서 시작하려면 멋진 웹 인터페이스에서 정기적 인 작업을 편집 할 때도 사용하십시오.
$ djcelerymon
(어떤 이유로 djcelerymon은 Ctrl + C를 사용하여 멈출 수 없습니다. Ctrl + Z + kill % 1 사용)
-
==============================
2.이 질문은 Google 그룹에 응답되었습니다.
이 질문은 Google 그룹에 응답되었습니다.
나는 저자가 아니다, 모든 신용은 진 마크에게 간다.
-
==============================
3.django-celery-beat라는 라이브러리가 있는데,이 라이브러리는 필요한 모델을 제공합니다. 새로운 정기적 인 작업을 동적으로로드하려면 자체 Scheduler를 만들어야합니다.
django-celery-beat라는 라이브러리가 있는데,이 라이브러리는 필요한 모델을 제공합니다. 새로운 정기적 인 작업을 동적으로로드하려면 자체 Scheduler를 만들어야합니다.
from django_celery_beat.schedulers import DatabaseScheduler class AutoUpdateScheduler(DatabaseScheduler): def tick(self, *args, **kwargs): if self.schedule_changed(): print('resetting heap') self.sync() self._heap = None new_schedule = self.all_as_schedule() if new_schedule: to_add = new_schedule.keys() - self.schedule.keys() to_remove = self.schedule.keys() - new_schedule.keys() for key in to_add: self.schedule[key] = new_schedule[key] for key in to_remove: del self.schedule[key] super(AutoUpdateScheduler, self).tick(*args, **kwargs) @property def schedule(self): if not self._initial_read and not self._schedule: self._initial_read = True self._schedule = self.all_as_schedule() return self._schedule
-
==============================
4.플라스크 및 djcelery를 구성하는이 플라스크 - djcelery를 점검 할 수 있으며 탐색 가능한 나머지 API를 제공합니다
플라스크 및 djcelery를 구성하는이 플라스크 - djcelery를 점검 할 수 있으며 탐색 가능한 나머지 API를 제공합니다
from https://stackoverflow.com/questions/10194975/how-to-dynamically-add-remove-periodic-tasks-to-celery-celerybeat by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Pyspark가있는 Spark 데이터 프레임의 각 열에있는 NaN 이외의 항목 수 계산 (0) | 2018.10.10 |
---|---|
[PYTHON] 판다 막대 막대에 막대 값에 주석 달기 (0) | 2018.10.10 |
[PYTHON] MySQL 데이터베이스에 데이터를 삽입하려면 어떻게해야합니까? (0) | 2018.10.10 |
[PYTHON] 파이썬에서 오버로드 된 함수? (0) | 2018.10.10 |
[PYTHON] 루핑하는 동안 이전 / 다음 요소에 액세스하는 방법? (0) | 2018.10.10 |