2017-11-21 6 views
0

시나리오 :셀러리 노동자도 나는 RabbitMQ 큐에 아무런 메시지가 없습니다

@app.task(bind=True, max_retries = 5, base=MyTask) 
def testing(self): 
    try: 
     raise smtplib.SMTPException 

    except smtplib.SMTPException as exc: 
     print 'This is it' 
     self.retry(exc=exc, countdown=2) 


#Overriding base class of Task 
class MyTask(celery.Task): 
    def on_failure(self, exc, task_id, args, kwargs, einfo): 
     print "MyTask on failure world" 
     pass 

:

내가 [큐에 메시지를 브로커로 RabbitMQ] 테스트의 목적을 위해 셀러리에 shared_task을 만들었다 작업자 생성 후 명령을 testing.delay () 입력하여 테스트 작업을 호출했습니다. 그리고 Ctrl + C를 눌러 서버를 종료하고 RabbitMQ 서버에서 모든 대기열을 삭제합니다. 그리고 다시 서버를 시작했습니다.

서버 시작 명령을 큐의celery worker --app=my_app.settings -l DEBUG

삭제 명령 :rabbitmqadmin delete queue name=<queue_name>

삭제 노동자 명령 :ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9

문제 :

RabbitMQ 서버에서 이미 모든 대기열을 삭제 했으므로 이제는 새로운 작업 만 받아 들여야합니다. 그러나 나는 아직도 오래된 일을 얻고있다. 게다가 새로운 일도 목록에 나타나지 않는다. 이것의 실제 원인은 무엇입니까? 무슨 일이 일어나고 무엇

답변

0

은 당신의 직원이 당신이 -Ofair 플래그를하지 않는 한 노동자 그래서

https://medium.com/@taylorhughes/three-quick-tips-from-two-years-with-celery-c05ff9d7f9eb

에게, 시작할 때, 하나 개 이상의 작업에 걸리는 경우에도 지운 큐, 당신의 노동자는 여전히 것이다 밖으로 경우 작업자 프로세스 자체를 종료하지 않는 한 이미 실행 된 작업으로 실행해야합니다. 재시작 후 실행하는 작업이있는 경우

를 추가 할 수

편집, 당신은 작업을 취소해야합니다.

http://celery.readthedocs.io/en/latest/faq.html#can-i-cancel-the-execution-of-a-task

+0

에도 입력하여 명령에서 셀러리 노동자를 살해 한 후'추신 auxww | grep '샐러리 작업자'| awk '{print $ 2}'| xargs kill -9'을 실행하고 컴퓨터를 다시 시작한 후에도 이러한 작업을 받고 있습니다. 내가 그 메시지를 어디서 들었습니까? – RaiBnod

+0

입니다. 작업을 취소하지 않았기 때문입니다. http://celery.readthedocs.io/en/latest/faq.html#can-i-cancel-the-execution-of-a-task – Jason

+0

위의 작업은 revoke 메소드 호출없이 실행되었습니다. 자, 어떻게 그 작업 목록을 지울 수 있습니까? 남은 작업의 task_id를 볼 수 있습니까? – RaiBnod

관련 문제