1

私はDjango/Celery Quickstart を使用しています... または、 cron の使用をやめて celery を愛する方法を学んだ方法で、ジョブがキューに入れられているようですが、実行されていないようです。

タスク.py:

from celery.task.schedules import crontab
from celery.decorators import periodic_task

# this will run every minute, see http://celeryproject.org/docs/reference/celery.task.schedules.html#celery.task.schedules.crontab
@periodic_task(run_every=crontab(hour="*", minute="*", day_of_week="*"))
def test():
    print "firing test task"

だから私はセロリを実行します:

bash-3.2$ sudo manage.py celeryd -v 2 -B -s celery -E -l INFO  

/scratch/software/python/lib/celery/apps/worker.py:166: RuntimeWarning: Running celeryd with superuser privileges is discouraged!
  'Running celeryd with superuser privileges is discouraged!'))

 -------------- celery@myserver v3.0.12 (Chiastic Slide)
---- **** ----- 
--- * ***  * -- [Configuration]
-- * - **** --- . broker:      django://localhost//
- ** ---------- . app:         default:0x12120290 (djcelery.loaders.DjangoLoader)
- ** ---------- . concurrency: 2 (processes)
- ** ---------- . events:      ON
- ** ---------- 
- *** --- * --- [Queues]
-- ******* ---- . celery:      exchange:celery(direct) binding:celery
--- ***** ----- 

[Tasks]
  . GotPatch.tasks.test

[2012-12-12 11:58:37,118: INFO/Beat] Celerybeat: Starting...
[2012-12-12 11:58:37,163: INFO/Beat] Scheduler: Sending due task GotPatch.tasks.test (GotPatch.tasks.test)
[2012-12-12 11:58:37,249: WARNING/MainProcess] /scratch/software/python/lib/djcelery/loaders.py:132: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
  warnings.warn("Using settings.DEBUG leads to a memory leak, never "
[2012-12-12 11:58:37,348: WARNING/MainProcess] celery@myserver ready.
[2012-12-12 11:58:37,352: INFO/MainProcess] consumer: Connected to django://localhost//.
[2012-12-12 11:58:37,700: INFO/MainProcess] child process calling self.run()
[2012-12-12 11:58:37,857: INFO/MainProcess] child process calling self.run()
[2012-12-12 11:59:00,229: INFO/Beat] Scheduler: Sending due task GotPatch.tasks.test (GotPatch.tasks.test)
[2012-12-12 12:00:00,017: INFO/Beat] Scheduler: Sending due task GotPatch.tasks.test (GotPatch.tasks.test)
[2012-12-12 12:01:00,020: INFO/Beat] Scheduler: Sending due task GotPatch.tasks.test (GotPatch.tasks.test)
[2012-12-12 12:02:00,024: INFO/Beat] Scheduler: Sending due task GotPatch.tasks.test (GotPatch.tasks.test)

タスクは実際にキューに入れられています:

python manage.py shell
>>> from kombu.transport.django.models import Message
>>> Message.objects.count()
234

そして、時間の経過とともにカウントが増加します。

>>> Message.objects.count()
477

ログ ファイルには、タスクが実行中であることを示すと思われる行はありません。私は次のようなものを期待しています:

[... INFO/MainProcess] Task myapp.tasks.test[39d57f82-fdd2-406a-ad5f-50b0e30a6492] succeeded in 0.00423407554626s: None

これを診断/デバッグする方法はありますか?

4

3 に答える 3

0

django の settyngs.py 内で BROKER_URL パラメータを指定していることを確認する必要があります。

BROKER_URL = 'django://'

また、django、mysql、およびセロリのタイムゾーンが等しいことを確認する必要があります。それは私を助けました。

追伸:

[... INFO/MainProcess] Task myapp.tasks.test[39d57f82-fdd2-406a-ad5f-50b0e30a6492] succeeded in 0.00423407554626s: None

この行は、タスクがスケジュールされたことを意味します (!実行されません!)

設定を確認してください。お役に立てば幸いです。

于 2014-11-25T16:00:25.530 に答える
0

私もセロリは初めてですが、提供されたリンクのコメントから、チュートリアルにエラーがあったようです。コメントの1つは指摘しています:

このコマンドで

sudo ./manage.py celeryd -v 2 -B -s celery -E -l 情報

tasks.py ファイルをロードするには、「-I tasks」を追加する必要があります ...

あなたはそれを試しましたか?

于 2013-01-30T08:42:47.150 に答える