시나리오 :셀러리 노동자도 나는 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 서버에서 이미 모든 대기열을 삭제 했으므로 이제는 새로운 작업 만 받아 들여야합니다. 그러나 나는 아직도 오래된 일을 얻고있다. 게다가 새로운 일도 목록에 나타나지 않는다. 이것의 실제 원인은 무엇입니까? 무슨 일이 일어나고 무엇
에도 입력하여 명령에서 셀러리 노동자를 살해 한 후'추신 auxww | grep '샐러리 작업자'| awk '{print $ 2}'| xargs kill -9'을 실행하고 컴퓨터를 다시 시작한 후에도 이러한 작업을 받고 있습니다. 내가 그 메시지를 어디서 들었습니까? – RaiBnod
입니다. 작업을 취소하지 않았기 때문입니다. http://celery.readthedocs.io/en/latest/faq.html#can-i-cancel-the-execution-of-a-task – Jason
위의 작업은 revoke 메소드 호출없이 실행되었습니다. 자, 어떻게 그 작업 목록을 지울 수 있습니까? 남은 작업의 task_id를 볼 수 있습니까? – RaiBnod