Django-Celery-RabbitMQの組み合わせを使用して、単純なバックグラウンドの定期的なタスクを作成しようとしています。Django 1.3.1をインストールし、djceleryをダウンロードしてセットアップしました。これが私のsettings.pyファイルがどのように見えるかです:
BROKER_HOST = "127.0.0.1"
BROKER_PORT = 5672
BROKER_VHOST = "/"
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
....
import djcelery
djcelery.setup_loader()
...
INSTALLED_APPS = (
'djcelery',
)
そして、次の内容の「tasks.py」ファイルをアプリケーションフォルダーに配置します。
from celery.task import PeriodicTask
from celery.registry import tasks
from datetime import timedelta
from datetime import datetime
class MyTask(PeriodicTask):
run_every = timedelta(minutes=1)
def run(self, **kwargs):
self.get_logger().info("Time now: " + datetime.now())
print("Time now: " + datetime.now())
tasks.register(MyTask)
次に、djangoサーバー(ローカル開発インスタンス)を起動します。
python manage.py runserver
次に、celerybeat
プロセスを開始します。
python manage.py celerybeat --logfile=<path_to_log_file> -l DEBUG
ログに次のようなエントリが表示されます。
[2012-04-29 07:50:54,671: DEBUG/MainProcess] tasks.MyTask sent. id->72a5963c-6e15-4fc5-a078-dd26da663323
また、対応するエントリがデータベースに作成されていることも確認できますが、クラスの実際のrun
関数で指定したテキストがどこに記録されているかがわかりません。MyTask
ロギング設定をいじってみて、セロリロガーの代わりにdjangoロガーを使ってみましたが、役に立ちませんでした。よくわかりませんが、タスクが実行されています。タスクにデバッグ情報を出力すると、どこに移動しますか?
また、私があらゆるタイプのメッセージキューシステムを使用するのはこれが初めてです。タスクはプロセスの一部として実行されるようですcelerybeat
-djangoWebフレームワークの外部。作成したすべてのdjangoモデルに引き続きアクセスできますか?
ありがとう、Venkat。