4

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。

4

2 に答える 2

5

Celerybeat it stuffは、必要なときにタスクをプッシュしますが、実行はしません。RabbitMqサーバーに保存されているインスタンスをタスクします。タスクを実行するには、celerydデーモンを実行する必要があります。

python manage.py celeryd --logfile=<path_to_log_file> -l DEBUG

また、RabbitMqを使用している場合は、特別なrabbitmq管理プラグインをインストールすることをお勧めします。

rabbitmq-plugins list
rabbitmq-enable rabbitmq_management
service rabbitmq-server restart

http://:55672 /ログイン:ゲストパス:ゲストで利用可能になります。ここでは、rabbitインスタンス内のタスクの数をオンラインで確認できます。

于 2012-04-30T07:38:53.430 に答える
0

セロリはタスクをRabbitMQに送信し、実行する必要があるため、RabbitMQログを確認する必要があります。したがって、タスクのすべての出力はRabbitMQログにあるはずです。

于 2012-04-29T16:44:44.177 に答える