私の問題は、ビート スケジューラがテーブル 'tasks' と 'workers' にエントリを保存しないことです。私はジャンゴとセロリを使用しています。私のデータベース(MySQL)では、間隔が120秒の定期的なtast「Estimate Region」を追加しました。
これは私が私の労働者を始める方法です:
`python manage.py celery worker -n worker.node1 -B --loglevel=info &`
ワーカーを起動した後、ターミナルでワーカーが動作し、スケジューラがデータベースから定期的なタスクを選択して操作することを確認できます。
私のタスクがどのように定義されているか:
@celery.task(name='fv.tasks.estimateRegion',
ignore_result=True,
max_retries=3)
def estimateRegion(region):
端末はこれを示しています:
WARNING ModelEntry: Estimate Region fv.tasks.estimateRegion(*['ASIA'], **{}) {<freq: 2.00 minutes>}
[2013-05-23 10:48:19,166: WARNING/MainProcess] <ModelEntry: Estimate Region fv.tasks.estimateRegion(*['ASIA'], **{}) {<freq: 2.00 minutes>}>
INFO Calculating estimators for exchange:Bombay Stock Exchange
タスク「領域の推定」によって results.csv ファイルが返されるので、ワーカーとビート スケジューラが機能していることがわかります。しかし、その後、django管理パネルの「タスク」または「ワーカー」にデータベースエントリがありません。
これがsettings.pyの私のセロリ設定です
` CELERY_DISABLE_RATE_LIMITS = True CELERY_TASK_SERIALIZER = 'pickle' CELERY_RESULT_SERIALIZER = 'pickle' CELERY_IMPORTS = ('fv.tasks') CELERY_RESULT_PERSISTENT = True
# amqp settings
BROKER_URL = 'amqp://fv:password@localhost'
#BROKER_URL = 'amqp://fv:password@192.168.99.31'
CELERY_RESULT_BACKEND = 'amqp'
CELERY_TASK_RESULT_EXPIRES = 18000
CELERY_ROUTES = (fv.routers.TaskRouter(), )
_estimatorExchange = Exchange('estimator')
CELERY_QUEUES = (
Queue('celery', Exchange('celery'), routing_key='celery'),
Queue('estimator', _estimatorExchange, routing_key='estimator'),
)
# beat scheduler settings
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
# development settings
CELERY_RESULT_PERSISTENT = False
CELERY_DEFAULT_DELIVERY_MODE = 'transient'`
誰かが私を助けてくれることを願っています:)