셀러리 / bunnymq에서 보류중인 모든 작업 삭제


답변:


296

로부터 문서 :

$ celery -A proj purge

또는

from proj.celery import app
app.control.purge()

(편집 : 현재 방법으로 업데이트되었습니다.)


56
또는, 장고에서 셀러리 3.0+의 경우 : manage.py celery purge( celeryctl이제 더 이상 사용되지 않으며 3.1에서 사라질 것입니다).
Henrik Heimbuerger

3
redis 백엔드 로이 작업을 수행하는 방법을 찾고있는이 답변을 찾았습니다. 내가 찾은 가장 좋은 방법 redis-cli KEYS "celery*" | xargs redis-cli DEL은 나를 위해 일한 것입니다. 사용중인 redis 백엔드에 저장된 모든 작업이 지워집니다.
Melignus

1
셀러리 3.0에서 어떻게 할 수 있습니까?
luistm

2
나를 위해, 그것은 단순히 celery purge(관련 가상 환경 내부)였습니다.
죄송합니다

Celery 4.0+의 경우 Django와 함께 사용하면이 명령이 다시 실행됩니다. 여기서 인수 는에 위치한 -ADjango 앱 celery.py입니다.
gitaarik

120

셀러리 3.0 이상 :

$ celery purge

특정 대기열을 제거하려면

$ celery -Q queue_name purge

9
연결 오류가 발생하면 앱을 지정해야합니다 (예 :) celery -A proj purge.
Kamil Sindi

25

Celery 2.x 및 3.x의 경우 :

예를 들어 -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

예, 이것은 이전 버전 (2.x 및 3.x)의 셀러리 용입니다. 답변을 편집 할 수 없습니다
smido


9

그 발견 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

첫 번째 열은 큐 이름이고 두 번째 열은 큐에서 대기중인 메시지 수이고 세 번째 열은 해당 큐의 리스너 수입니다. 대기열은 다음과 같습니다.

  • 셀러리-표준 dem 등성 셀러리 작업 대기열
  • apns-Push 등원이 아닌 Apple 푸시 알림 서비스 작업 대기열
  • 분석-야간 야간 분석을위한 대기열
  • * .pidbox-종료 및 재설정과 같은 작업자 명령에 대한 대기열, 작업 자당 하나씩 (셀러리 작업자 2 명, apns 작업자 1 명, 분석 작업자 1 명)
  • bcast. *-브로드 캐스트 큐 (큐를 잡는 것이 아니라 큐를 수신하는 모든 작업자에게 메시지 보내기)
  • celeryev. *-작업 분석보고를위한 Celery 이벤트 큐

분석 작업은 소규모 데이터 세트에서 훌륭하게 작동했지만 이제 처리하는 데 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

대답이 아닙니다. 그러나 매우 유익한 정보!
amn

4
celeryctl purge명명 된 대기열에서는 작동하지 않았습니다. python manage.py celery amqp queue.purge <queue_name>했다. 나는 복잡한 설정을 가진 사람들에게 컨텍스트가 유용하다고 생각하므로 celeryctl purge실패 했을 때 필요한 것을 알아낼 수 있습니다.
jwhitlock

manage.pyCelery 3.1.17에서 찾을 수 없습니다 . 파일이 제거되었거나 새 것으로 스패닝됩니까? 그러나 queue.purge에서 해당 인터페이스 ( ) 모양을 찾았 */bin/amqp.py습니다. 그러나 파일의 내용을 문서와 관련 시키려고 노력한 후에 Celery가 문서화되지 않았 으며 최소한 소스 코드로 판단 하여 매우 복잡한 작업 임을 인정해야합니다 .
amn

manage.pyDjango 관리 스크립트이며 manage.py celeryDjango 설정에서 구성을로드 한 후 셀러리를 실행합니다. Django 외부에서 셀러리를 사용하지는 않았지만 포함 된 celery명령은 원하는 것일 수 있습니다. celery.readthedocs.org/en/latest/userguide/monitoring.html
jwhitlock

5

셀러리 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 ()를 사용하여 작업을 제거해야합니다.

따라서 전체 큐 작업자를 제거하려면 중지해야합니다.


5

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)

2

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

2

구성된 모든 작업 대기열을 제거하는 celery 4+ 샐러리 제거 명령

celery -A *APPNAME* purge

프로그래밍 방식으로 :

from proj.celery import app
app.control.purge()

보류중인 모든 작업이 제거됩니다. 참조 : 셀러리 독

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.