두 개의 서버가 있습니다 : 하나는 django 응용 프로그램을 실행하고 다른 하나는 rabbitmq 대기열과 셀러리 작업자를 실행하는 서버입니다. 다음과 같이 큐/근로자를 실행하는 서버에 내 tasks.py는 작업을 포함해당 작업을 가져올 수 없을 때 셀러리 작업 실행
@task(queue="reports")
def test_task():
time.sleep(120)
내 목표는 장고보기에서이 작업을 실행하는 것입니다. 작업에 대한 코드가 장고보기와 다른 서버에 있기 때문에 작업을 호출하고 싶습니다. 다음 코드를 사용하여 장고에서 작업자 시스템으로 작업을 보내려고합니다.
send_task("tasks.test_task", task_id=task_id, args=[], kwargs={}, publisher=publisher, queue=queue)
나는이 방법
here을 찾았지만, 지금까지 근무하지 않은 테스트.
셀러리 작업자 서버의 셀러리 작업자 로그 파일에서 tail -F로 테스트 한 다음 브라우저에서 send_task가 포함 된보기의 URL로 이동합니다. 나는 테일 출력에 '수신 됨'으로 표시 할 작업을 찾고 있지만 그렇지 않습니다.
샐러리 작업자의 로그 수준은 DEBUG이고 로그 파일은 작업이 적절한 이름으로 등록되어 있고 django 앱의 settings.py에 rabbitmq 서버에 대한 올바른 IP와 자격 증명이 포함되어 있음을 보여줍니다. 다른 접근법을 시도하면서 send_task에 전달 된 문자열을 유효한 작업 (예 : send_task ('asdf'))으로 변경했을 때 샐러리 로그 파일에 오류 메시지가 표시되는 경우가있었습니다. 이로 인해 로그 파일에 UnregisteredError가 발생했습니다. 그러나 이는 때로는 발생하며 설정과 호출의 다양한 조합을 테스트 할 때 동작을 확실하게 복제하는 방법을 찾지 못했습니다.
CELERY_RESULT_BACKEND = 'amqp'
BROKER_HOST = 'the.correct.IP.address'
BROKER_USER = 'the_correct_user'
BROKER_PASSWORD = 'the_correct_pass'
BROKER_VHOST = 'the_correct_vhost'
BROKER_PORT = 5672
내가 주변에 검색 좀했는데 send_task에 훨씬 못 찾았 :
또한,이 (제거 실제 값) 장고 프로젝트에 settings.py의 관련 부분이다. 내가 잘못하고있는 것에 대한 아이디어가 있습니까?
두 컴퓨터간에 코드를 어떻게 공유했는지 알고 싶습니다. 여기에 그와 관련된 질문이 있습니다 : http://stackoverflow.com/questions/28592243/celery-tasks-functions-web-server-vs-remote-server 감사합니다! – lajarre