내 Django 프로젝트에서 나는 Celery (docs), Django-Celery 및 RabbitMQ을 브로커로 사용하여 일부 비동기 작업을 실행하고 있습니다. 일반적으로 작동하는 반면, 설치에는 두 가지 문제가 있습니다.Django Celery - n 초 - 카운트 다운 플래그 지연 작업을 시작하는 방법이 무시됩니다.
a) 작업 실행이 요청 스레드와 결합 된 것 같습니다.
from celery.task import Task
from celery.registry import tasks
#in project_management.tasks.py
class TestTask(Task):
def run(self, x, y):
print "running TestTask"
return x + y
tasks.register(TestTask)
: 따라서 사용자의 HTTP 요청 작업이
B를 실행 때까지 작업 실행 카운트 다운 플래그 테스트 목적으로
내가 가지고 설치를 간단한 TestTask을 무시하는 것) 기다려야 할 것 같다 따라서 10으로 설정 카운트 다운 플래그가 완전히 무시됩니다
python manage.py shell
from project_management.tasks import TestTask
result = TestTask.apply_async(args=[5, 5], kwargs={}, countdown=10)#immediately outputs "running TestTask"
result.result -> immediately returns 10
result.ready() -> immediately returns True
: 콘솔 내에서이 작업을 실행하면 나에게 다음과 같은 결과를 제공합니다. 어떤 설정이 잘못 되었습니까?
나는 다음 명령을 사용하여 셀러리와 RabbitMQ를 시작 해요 :RABBITMQ_NODE_PORT=5672 rabbitmq-server
python manage.py celeryd --loglevel=info
업데이트 :
나는이 문제가 시간대 설정으로 어떻게 든 관련 생각합니다. 자세한 내용은 thread을 참조하십시오. 어쨌든 그것을 우회하는 방법을 모릅니다.
>>> from project_management.tasks import add
>>> from datetime import timedelta, datetime
>>> eta = datetime.now() + timedelta(seconds=60)
>>> result = add.apply_async(args=[5, 5], kwargs={}, eta=eta)
>>> result.ready()
True
>>> eta = datetime.utcnow() + timedelta(seconds=60)
>>> result = add.apply_async(args=[5, 5], kwargs={}, eta=eta)
>>> result.ready()
True
'result.get()'을 사용하여 값을 얻으려고 했습니까? 값을 즉시 반환합니까? –
예, 즉시. 한 번 더 확인했습니다. –