2016-10-26 4 views
1

セロリが新しくなりました。私はDjangoプロジェクトでCeleryを適切に設定しようとしています。セロリが動作するかどうかをテストするために、私は2秒ごとに "periodic_task"を出力する定期的なタスクを作成しました。残念ながら、それは動作しませんがエラーはありません。 RabbitMQのセロリの単純な定期的な作業は機能しませんが、エラーはありません。

Project/project/celery.py

from __future__ import absolute_import 

import os 

from celery import Celery 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 

from django.conf import settings # noqa 

app = Celery('project') 

app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

@app.task(bind=True) 
def myfunc(): 
    print 'periodic_task' 

@app.task(bind=True) 
def debudeg_task(self): 
    print('Request: {0!r}'.format(self.request)) 

Project/project/__init__.py

from __future__ import absolute_import 

from .celery import app as celery_app 

インストール

Settings.py

INSTALLED_APPS = [ 
    'djcelery', 
    ...] 
... 
... 

CELERYBEAT_SCHEDULE = { 
    'schedule-name': { 
         'task': 'project.celery.myfunc', # We are going to create a email_sending_method later in this post. 
         'schedule': timedelta(seconds=2), 
         }, 
    } 

そしてpython manage.py前に、私はcelery -A project worker -l info

はまだコンソールに2秒ごとに印刷された任意の「periodic_task」を参照してくださいすることはできません...あなたが何をすべきかを知っています実行しますか?

EDIT CELERY CONSOLE:

-------------- [email protected]_NB v3.1.23 (Cipater) 
---- **** ----- 
--- * *** * -- Windows-8-6.2.9200 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   dolava:0x33d1350 
- ** ---------- .> transport: amqp://guest:**@localhost:5672// 
- ** ---------- .> results:  disabled:// 
- *** --- * --- .> concurrency: 4 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] 
-------------- .> celery   exchange=celery(direct) key=celery 


[tasks] 
    . project.celery.debudeg_task 
    . project.celery.myfunc 

EDIT:

倒すために労働者を変更した後、動作しているようです。 2秒ごとに何かが起きている(5秒に変更)が、タスクの結果を見ることができません。 (私も間違った道、CELERYBEAT_SCHEDULEに何かを置くことができ、それはどんなエラーが発生しません。)

を私がするmyfunc関数のコードを変更:

@app.task(bind=True) 
def myfunc(): 
    # notifications.send_message_to_admin('sdaa','dsadasdsa') 
    with open('text.txt','a') as f: 
     f.write('sa') 

しかし、私はどこにもTEXT.TXT見ることができません。

> celery -A dolava beat -l info 
celery beat v3.1.23 (Cipater) is starting. 
__ - ... __ -  _ 
Configuration -> 
    . broker -> amqp://guest:**@localhost:5672// 
    . loader -> celery.loaders.app.AppLoader 
    . scheduler -> djcelery.schedulers.DatabaseScheduler 

    . logfile -> [stderr]@%INFO 
    . maxinterval -> now (0s) 
[2016-10-26 17:46:50,135: INFO/MainProcess] beat: Starting... 
[2016-10-26 17:46:50,138: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:51,433: INFO/MainProcess] DatabaseScheduler: Schedule changed. 

[2016-10-26 17:46:51,433: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:51,812: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
[2016-10-26 17:46:51,864: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:57,138: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
[2016-10-26 17:47:02,230: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
+0

を実行してみ実行しているのRabbitMQサービスですか? –

+0

@anonymousはい、RabbitMQをインストールするまでは機能しませんでした。私は非常に新しく、セロリと非常に混同しているので、明らかなことがあります。私は、質問の一番下にセロリのコンソールの一部を追加しました。 –

+0

また、セロリタスク内のコードを更新するときに注意してください。 –

答えて

3

$ celery -A project beat -l info

+0

これは役に立ちそうです。私はセロリのコンソールで何かがそれぞれ2(または5に変更された)秒間に起こることを見ることができます。問題は、myfuncが何の効果もないように見えるということです。質問の最後にコンソール出力を追加しました。 –

+1

ああ、私は労働者の代わりにこれを実行します。一度にワーカーとビートの両方を走らせようとしたとき、それはうまくいった。 –

関連する問題