NBsystemにAPP1、APP2、APP3、APP4、APP5、APP6のクローラーがあると仮定して、つねに3クローラーをceleryで動作させて、1クローラー終わるごとに次のクローラー(APP4)を起動したい。 コードおしえて

理想的な場合は、Celeryのチェーン(chain)やチョコレート(chord)などのタスクコントロール機能を使用して、タスクの実行と順序付けを制御します。以下は、そのための基本的な設定とコード例です。

  1. Celeryの設定: settings.pyファイルでCeleryの設定を行います。
python
# settings.py CELERY_BROKER_URL = 'redis://localhost:6379/0' # Redisの接続情報
  1. Celeryタスクの作成: tasks.pyファイルにCeleryタスクを作成します。
python
# tasks.py from celery import Celery app = Celery('tasks', broker='redis://localhost:6379/0') @app.task def crawl_app(app_name): # アプリケーションごとのクローリング処理を実行する print(f'Crawling {app_name}') # ここにアプリケーションごとのクローリング処理を記述する
  1. タスクの連鎖設定: クローラーの実行順序を管理するCeleryタスクチェーンを作成します。
python
# tasks.py from celery import chain @app.task def crawl_app_sequence(): # クローラーアプリケーションの連鎖を定義する crawl_chain = chain( crawl_app.s('APP1'), crawl_app.s('APP2'), crawl_app.s('APP3'), crawl_app.s('APP4'), crawl_app.s('APP5'), crawl_app.s('APP6') ) # 連鎖を実行する result = crawl_chain.delay() return result
  1. Celeryワーカーの起動: Celeryワーカーを起動してタスクを実行します。
bash
celery -A your_project worker --loglevel=info
  1. タスクの実行: Djangoのどこかでcrawl_app_sequence()タスクを呼び出します。これにより、連鎖されたクローラータスクが実行されます。

この設定により、crawl_app_sequence()タスクが呼び出されると、crawl_app()タスクが順番に実行されます。一度に3つのタスクが実行され、1つのタスクが完了すると、次のタスクが開始されます。

未分類

Posted by ぼっち