답변:
로부터 문서 :
$ celery -A proj purge
또는
from proj.celery import app
app.control.purge()
(편집 : 현재 방법으로 업데이트되었습니다.)
redis-cli KEYS "celery*" | xargs redis-cli DEL
은 나를 위해 일한 것입니다. 사용중인 redis 백엔드에 저장된 모든 작업이 지워집니다.
-A
Django 앱 celery.py
입니다.
셀러리 3.0 이상 :
$ celery purge
특정 대기열을 제거하려면
$ celery -Q queue_name purge
celery -A proj purge
.
예를 들어 -Q 매개 변수와 함께 worker를 사용하여 큐를 정의하는 경우
celery worker -Q queue1,queue2,queue3
그때 celery purge
당신이 그것에 큐 PARAMS을 통과 할 수 없기 때문에, 작동하지 않습니다. 기본 대기열 만 삭제합니다. 해결책은 다음과 --purge
같은 매개 변수로 작업자를 시작하는 것입니다 .
celery worker -Q queue1,queue2,queue3 --purge
그러나 이것은 노동자를 운영합니다.
다른 옵션은 셀러리의 amqp 부속 명령을 사용하는 것입니다
celery amqp queue.delete queue1
celery amqp queue.delete queue2
celery amqp queue.delete queue3
셀러리 3 이상에서 :
CLI :
$ celery -A proj purge
프로그래밍 방식으로 :
>>> from proj.celery import app
>>> app.control.purge()
http://docs.celeryproject.org/en/latest/faq.html#how-do-i-purge-all-waiting-tasks
그 발견 celery purge
내 더 복잡한 셀러리 설정 작동하지 않습니다. 다른 목적으로 여러 개의 명명 된 대기열을 사용합니다.
$ sudo rabbitmqctl list_queues -p celery name messages consumers
Listing queues ... # Output sorted, whitespaced for readability
celery 0 2
celery@web01.celery.pidbox 0 1
celery@web02.celery.pidbox 0 1
apns 0 1
apns@web01.celery.pidbox 0 1
analytics 1 1
analytics@web01.celery.pidbox 0 1
bcast.361093f1-de68-46c5-adff-d49ea8f164c0 0 1
bcast.a53632b0-c8b8-46d9-bd59-364afe9998c1 0 1
celeryev.c27b070d-b07e-4e37-9dca-dbb45d03fd54 0 1
celeryev.c66a9bed-84bd-40b0-8fe7-4e4d0c002866 0 1
celeryev.b490f71a-be1a-4cd8-ae17-06a713cc2a99 0 1
celeryev.9d023165-ab4a-42cb-86f8-90294b80bd1e 0 1
첫 번째 열은 큐 이름이고 두 번째 열은 큐에서 대기중인 메시지 수이고 세 번째 열은 해당 큐의 리스너 수입니다. 대기열은 다음과 같습니다.
분석 작업은 소규모 데이터 세트에서 훌륭하게 작동했지만 이제 처리하는 데 24 시간 이상이 걸립니다. 간혹 무언가가 잘못되어 데이터베이스를 기다리면서 멈출 수 있습니다. 다시 작성해야하지만 그 때까지 멈 추면 작업을 종료하고 대기열을 비운 다음 다시 시도하십시오. 분석 대기열의 메시지 수 (0 (종료 된 분석)) 또는 1 (어제 밤의 분석이 완료되기를 기다리는)을보고 "고착"을 감지합니다. 2 이상은 나쁘고 이메일을받습니다.
celery purge
브로드 캐스트 대기열 중 하나에서 작업을 지우도록 제안했지만 다른 명명 된 대기열을 선택하는 옵션이 표시되지 않습니다.
내 과정은 다음과 같습니다.
$ sudo /etc/init.d/celeryd stop # Wait for analytics task to be last one, Ctrl-C
$ ps -ef | grep analytics # Get the PID of the worker, not the root PID reported by celery
$ sudo kill <PID>
$ sudo /etc/init.d/celeryd stop # Confim dead
$ python manage.py celery amqp queue.purge analytics
$ sudo rabbitmqctl list_queues -p celery name messages consumers # Confirm messages is 0
$ sudo /etc/init.d/celeryd start
celeryctl purge
명명 된 대기열에서는 작동하지 않았습니다. python manage.py celery amqp queue.purge <queue_name>
했다. 나는 복잡한 설정을 가진 사람들에게 컨텍스트가 유용하다고 생각하므로 celeryctl purge
실패 했을 때 필요한 것을 알아낼 수 있습니다.
manage.py
Celery 3.1.17에서 찾을 수 없습니다 . 파일이 제거되었거나 새 것으로 스패닝됩니까? 그러나 queue.purge
에서 해당 인터페이스 ( ) 모양을 찾았 */bin/amqp.py
습니다. 그러나 파일의 내용을 문서와 관련 시키려고 노력한 후에 Celery가 문서화되지 않았 으며 최소한 소스 코드로 판단 하여 매우 복잡한 작업 임을 인정해야합니다 .
manage.py
Django 관리 스크립트이며 manage.py celery
Django 설정에서 구성을로드 한 후 셀러리를 실행합니다. Django 외부에서 셀러리를 사용하지는 않았지만 포함 된 celery
명령은 원하는 것일 수 있습니다. celery.readthedocs.org/en/latest/userguide/monitoring.html
셀러리 3 이상
http://docs.celeryproject.org/en/3.1/faq.html#how-do-i-purge-all-waiting-tasks
CLI
명명 된 대기열 제거 :
celery -A proj amqp queue.purge <queue name>
구성된 큐 제거
celery -A proj purge
메시지를 제거했지만 대기열에 여전히 메시지가 남아 있습니까? 답변 : 작업이 실제로 실행되는 즉시 작업이 승인됩니다 (대기열에서 제거됨). 작업자가 작업을받은 후에는 실제로 이미 실행 대기중인 작업이 많은 경우 실제로 실행될 때까지 시간이 걸립니다. 승인되지 않은 메시지는 브로커 (AMQP 서버)에 대한 연결을 닫을 때까지 작업자가 보류합니다. 연결이 닫히면 (예 : 작업자가 중지되어) 브로커가 다음 사용 가능한 작업자 (또는 다시 시작했을 때 동일한 작업자)에게 작업을 다시 보내므로 대기중인 작업 대기열을 올바르게 제거합니다. 모든 작업자를 중지 한 다음 celery.control.purge ()를 사용하여 작업을 제거해야합니다.
따라서 전체 큐 작업자를 제거하려면 중지해야합니다.
Celery를 완전히 중지하기 위해 보류중인 모든 작업과 활성 및 예약 된 작업을 제거하려면 다음과 같이하십시오.
from proj.celery import app
from celery.task.control import inspect, revoke
# remove pending tasks
app.control.purge()
# remove active tasks
i = inspect()
jobs = i.active()
for hostname in jobs:
tasks = jobs[hostname]
for task in tasks:
revoke(task['id'], terminate=True)
# remove reserved tasks
jobs = i.reserved()
for hostname in jobs:
tasks = jobs[hostname]
for task in tasks:
revoke(task['id'], terminate=True)
1. 대기중인 작업 대기열을 올바르게 제거하려면 모든 작업자를 중지해야합니다 ( http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are- 여전히 왼쪽에 메시지가 남음 ) :
$ sudo rabbitmqctl stop
또는 (토끼 관리자가 메시지를 관리하는 경우) :
$ sudo supervisorctl stop all
2. ... 그리고 특정 대기열에서 작업을 제거합니다.
$ cd <source_dir>
$ celery amqp queue.purge <queue name>
3. RabbitMQ를 시작하십시오.
$ sudo rabbitmqctl start
또는 (RabbitMQ가 관리자에 의해 관리되는 경우) :
$ sudo supervisorctl start all
manage.py celery purge
(celeryctl
이제 더 이상 사용되지 않으며 3.1에서 사라질 것입니다).