1

私の問題は、ビート スケジューラがテーブル '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'`

誰かが私を助けてくれることを願っています:)

4

1 に答える 1