1

例として、ビデオの処理に使用する Django Web アプリケーションがあり、セロリを使用してそれらのタスクの一部をオフロードしたいとします。ビデオ編集など、Celery で非常にプロセッサを集中的に使用するタスクがある場合、Django が実行されているのと同じサーバーで実行したくありません。Django アプリケーションで定義したタスクを送信して、別のサーバーでリモートで実行する方法はありますか?

Celery に関するすべてのドキュメントを読んでいますが、このような状況は見られません。この状況に適していると思われる唯一の方法は、Celery を別の場所で実行し、Celery HTTP Gateway を使用して HTTP リクエストを作成することです。

django-celery の場合、タスクはどこで実行されますか? ブローカーの URL をどこに設定したか、または django を実行しているマシンに設定しましたか?

4

1 に答える 1

3

Celeryは、箱から出してリモートタスクを実行します。たとえば、 videoprocessor.pyと呼ばれる、ビデオ処理を実行するセロリワーカーを含むPythonモジュールがあるとします。あなたはそれをあなたのリモートコンピュータに置き、そこでその労働者を始めます:

celery -A videoprocessor worker

(コマンドラインから実行する場合)

また、そのモジュールをWebサーバーマシンに配置しますが、そこで起動しませ。ただし、Webサーバーマシンのメインスクリプト(引数としてclient.pyと呼ばれるスクリプト)でインポートできる場所にあります。さらに、リモートマシンとまったく同じ名前でインポートされます。たとえば、「MyPackage.videoprocessor」で始まります。

これで、Webサーバーのメインスクリプトclient.pyがvideoprocessor.pyモジュールをインポートすると、そのモジュールのワーカーから署名が作成されます。この署名は、リモートコンピューターのvideoprocessor.pyにも有効です。そして、それが実行されていて、サーバーマシン上のvideoprocessor.pyが実行されていないため、リモートワーカーが毎回使用されます。

リモートマシンのワーカーが、Webサーバーマシンのクライアントスクリプトと同じバックエンドを使用していることを確認してください。これはRedisやRabbitMQなどである可能性があり、少なくともIP番号を指定する必要があります。セットアップによっては、さらに多くのIP番号(データベース、ポート)を指定する必要があります。

于 2012-11-09T11:17:31.467 に答える