Celery 문서에서 예제 를 실행하려고합니다 .
난 달린다: celeryd --loglevel=INFO
/usr/local/lib/python2.7/dist-packages/celery/loaders/default.py:64: NotConfigured: No 'celeryconfig' module found! Please make sure it exists and is available to Python.
"is available to Python." % (configname, )))
[2012-03-19 04:26:34,899: WARNING/MainProcess]
-------------- celery@ubuntu v2.5.1
---- **** -----
--- * *** * -- [Configuration]
-- * - **** --- . broker: amqp://guest@localhost:5672//
- ** ---------- . loader: celery.loaders.default.Loader
- ** ---------- . logfile: [stderr]@INFO
- ** ---------- . concurrency: 4
- ** ---------- . events: OFF
- *** --- * --- . beat: OFF
-- ******* ----
--- ***** ----- [Queues]
-------------- . celery: exchange:celery (direct) binding:celery
tasks.py :
# -*- coding: utf-8 -*-
from celery.task import task
@task
def add(x, y):
return x + y
run_task.py :
# -*- coding: utf-8 -*-
from tasks import add
result = add.delay(4, 4)
print (result)
print (result.ready())
print (result.get())
동일한 폴더 celeryconfig.py에서 :
CELERY_IMPORTS = ("tasks", )
CELERY_RESULT_BACKEND = "amqp"
BROKER_URL = "amqp://guest:guest@localhost:5672//"
CELERY_TASK_RESULT_EXPIRES = 300
“run_task.py”를 실행할 때 :
파이썬 콘솔에서
eb503f77-b5fc-44e2-ac0b-91ce6ddbf153
False
celeryd 서버의 오류
[2012-03-19 04:34:14,913: ERROR/MainProcess] Received unregistered task of type 'tasks.add'.
The message has been ignored and discarded.
Did you remember to import the module containing this task?
Or maybe you are using relative imports?
Please see http://bit.ly/gLye1c for more information.
The full contents of the message body was:
{'retries': 0, 'task': 'tasks.add', 'utc': False, 'args': (4, 4), 'expires': None, 'eta': None, 'kwargs': {}, 'id': '841bc21f-8124-436b-92f1-e3b62cafdfe7'}
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/celery/worker/consumer.py", line 444, in receive_message
self.strategies[name](message, body, message.ack_log_error)
KeyError: 'tasks.add'
무엇이 문제인지 설명해주세요.
답변
celery.registry.TaskRegistry
수업 에 등록 된 과제의 현재 목록을 볼 수 있습니다 . celeryconfig (현재 디렉토리에 있음)가 PYTHONPATH
없어서 셀러리가 찾을 수없고 기본값으로 돌아갈 수 있습니다. 셀러리를 시작할 때 명시 적으로 지정하기 만하면됩니다.
celeryd --loglevel=INFO --settings=celeryconfig
당신은 또한 설정할 수 있으며 --loglevel=DEBUG
아마 즉시 문제를 볼 수 있습니다 .
답변
작업자 서버를 다시 시작해야한다고 생각합니다. 나는 같은 문제를 만나고 다시 시작하여 해결합니다.
답변
나는 같은 문제가 있었다. "Received unregistered task of type.."
celeryd 서비스가 서비스 시작시 작업을 찾아 등록하지 않았기 (시작할 때 목록이 표시됩니다
./manage.py celeryd --loglevel=info
).
이러한 작업은 CELERY_IMPORTS = ("tasks", )
설정 파일에서 선언해야 합니다.
특수 celery_settings.py
파일 이있는 경우 --settings=celery_settings.py
digivampire가 작성한 대로 celeryd 서비스 시작시 선언해야합니다 .
답변
사용 여부 CELERY_IMPORTS
또는autodiscover_tasks
중요한 점은 작업을 찾을 수 있고 Celery에 등록 된 작업의 이름이 작업자가 가져 오려는 이름과 일치해야한다는 것입니다.
Celery를 실행 celery worker -A project --loglevel=DEBUG
하면 작업 이름이 표시되어야합니다. 예를 들어, 나는이 있으면 debug_task
내에서 작업을 celery.py
.
[tasks]
. project.celery.debug_task
. celery.backend_cleanup
. celery.chain
. celery.chord
. celery.chord_unlock
. celery.chunks
. celery.group
. celery.map
. celery.starmap
당신이 목록에서 작업을 볼 수없는 경우, 셀러리 구성 수입을 확인하시기 바랍니다 작업을 올바르게, 하나의 --setting
, --config
, celeryconfig
또는config_from_object
.
당신이 셀러리 비트를 사용하는 경우, 확인 작업 이름을 확인 task
, 당신은에 사용 CELERYBEAT_SCHEDULE
셀러리 작업 목록에서 일치하는 이름을.
답변
나도 같은 문제가 있었다. 나는 추가했다
CELERY_IMPORTS=("mytasks")
celeryconfig.py
그것을 해결하기 위해 내 파일에.
답변
app = Celery('proj',
broker='amqp://',
backend='amqp://',
include=['proj.tasks'])
include = [ ‘proj.tasks’]
당신은 최상위 디렉토리로 가서 이것을 실행해야합니다.
celery -A app.celery_module.celeryapp worker --loglevel=info
아니
celery -A celeryapp worker --loglevel=info
celeryconfig.py 입력에서 imports = ( “path.ptah.tasks”,)
다른 모듈에서 작업을 호출하십시오 !!!!!!!!
답변
–settings를 사용하면 효과가 없었습니다. 모든 것이 작동하도록하려면 다음을 사용해야했습니다.
celery --config=celeryconfig --loglevel=INFO
다음은 CELERY_IMPORTS가 추가 된 celeryconfig 파일입니다.
# Celery configuration file
BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'America/Los_Angeles'
CELERY_ENABLE_UTC = True
CELERY_IMPORTS = ("tasks",)
감독자를 사용하여 셀러리를 데몬으로 시작하기 때문에 설정이 조금 더 까다로 웠습니다.