2011-10-27 1 views
15

파이썬에서 특정 que의 예약되고 실행중인 모든 작업을 셀러리로 제거하는 방법은 무엇입니까? 질문은 꽤 straigtforward 보인다,하지만 난 명령 줄의 코드를 찾고 있지 않다 추가파이썬에서 샐러리로 특정 대기열의 모든 작업을 제거하는 방법은 무엇입니까?

내가 가야를 정의하고 작업을 관리 할 수있는 그 케 제거하고자하는 다음과 같은 라인이 있습니다

CELERY_ROUTES = {"socialreport.tasks.twitter_save": {"queue": "twitter_save"}} 

을 1 포인트 시간에 나는 비공개 파이썬 코드로 twitter_save의 모든 작업을 제거하고 싶습니다. 아마도 방송 기능을 가지고 있을까요? 이것에 대한 문서를 찾을 수 없었습니다. 이것이 가능한가?

답변

33

단지 셀러리 3.1 @Sam Stoelinga 대답을 업데이트, 지금은 터미널에 다음과 같이 수행 할 수 있습니다 :

./manage.py celery amqp queue.purge <QUEUE_NAME> 

그렇지 않을 경우, 반드시 셀러리는 --broker= 플래그를 설정하여 브로커에 정확하게 지적 할 수있다합니다.

+0

덕분에 셀러리 3.1 – Gourneau

+0

유효한 AMQP URL을 가리 키기 위해'--broker = ... '인수를 사용해야했습니다. 어떤 이유로 Django settings.py에서 구성된 값이 선택되지 않았습니다 . 아마도 내 설정의 특질. – RichVel

+0

@RichVel 당신은'./manage.py'에서 그것을 실행하고 있습니까? 브로커 url 인자는'settings.py' 파일에서 가져와야합니다. – Hassek

6

롤 아주 간단합니다. 누군가가 나를 도울 수 있기를 바랍니다.

from celery.bin.camqadm import camqadm 
camqadm('queue.purge', queue_name_as_string) 

나는 아직도 내가 큐에 대한 작업을 처리하기 위해 다시 celeryd을 실행하는 데 필요한 퍼지 후 가야를 정화하기 전에 celeryd을 중지해야이 유일한 문제. 성공하면이 질문이 업데이트됩니다.

Celeryd를 중지하고 대기열을 제거한 다음 다시 시작하는 것이 좋지 않으면 해결해주십시오. 나는 실제로 용어를 사용하고 있음을 알고 있습니다. 왜냐하면 실제로 그 작업이 종료되기를 원하기 때문입니다.

celery amqp queue.purge <QUEUE_NAME> 

하는 장고를 들어 manage.py 파일에서 시작해야합니다 :

kill_command = "ps auxww | grep 'celeryd -n twitter_save' | awk '{print $2}' | xargs kill -9" 
subprocess.call(kill_command, shell=True) 

camqadm('queue.purge', 'twitter_save') 
rerun_command = "/home/samos/Software/virt_env/twittersyncv1/bin/python %s/manage.py celeryd -n twitter_save -l info -Q twitter_save" % settings.PROJECT_ROOT 

os.popen(rerun_command+' &') 
send_task("socialreport.tasks.twitter_save") 
6

Celery 3.1의 원래 대답은 작동하지 않습니다. Hassek의 업데이트는 명령 줄에서 수행하려는 경우 올바른 명령입니다. 당신이 프로그램, 이렇게 할 싶은 경우 :

celery_app = Celery(...) 

다음 : 당신을 가정

이 셀러리 응용 프로그램을 실행

import celery.bin.amqp 
amqp = celery.bin.amqp.amqp(app = celery_app) 
amqp.run('queue.purge', 'name_of_your_queue') 

이 경우에 편리 어디 ' 많은 작업을 대기열에 넣었고 하나의 작업에서 나머지 작업이 실행되지 않도록하는 치명적인 상황이 발생했습니다.

예. 당신은 일련의 웹 크롤러 작업을 대기열에 넣었고 작업 중간에 서버의 IP 주소가 차단되었습니다. 나머지 작업을 수행 할 필요는 없습니다. 따라서이 경우 자체 작업으로 자체 큐를 제거 할 수 있습니다.

관련 문제