31

非同期タスクとスケジュール タスクの 2 種類のタスクがあります。だから、ここに私のディレクトリ構造があります:

proj
  |
  -- tasks
      |
      -- __init__.py
      |
      -- celeryapp.py     => celery instance defined in this file.
      |
      -- celeryconfig.py
      |
      -- async
      |    |
      |    -- __init__.py
      |    |
      |    -- task1.py    => from proj.tasks.celeryapp import celery
      |    |
      |    -- task2.py    => from proj.tasks.celeryapp import celery
      |
      -- schedule
           |
           -- __init__.py
           |
           -- task1.py    => from proj.tasks.celeryapp import celery
           |
           -- task2.py    => from proj.tasks.celeryapp import celery

しかし、以下のように celery worker を実行すると動作しません。セロリビートスケジューラからのタスクを受け付けることができません。

 $ celery worker --app=tasks -Q my_queue,default_queue

では、複数のタスク ファイルの編成に関するベスト プラクティスはありますか?

4

2 に答える 2

11

セロリのドキュメントに基づいて、次のようなセロリ タスクの構造をインポートできます。

たとえば、次のような (想像上の) ディレクトリ ツリーがあるとします。

|
|-- foo
|    |-- __init__.py
|    |-- tasks.py
|
|-- bar
     |-- __init__.py
     |-- tasks.py

次に呼び出すapp.autodiscover_tasks(['foo', bar'])と、モジュール foo.tasks および bar.tasks がインポートされます。

于 2015-12-27T18:23:24.670 に答える
4

Celery タスクは、その呼び出しに応じて、非同期、同期、またはスケジュールすることができます

task.delay(arg1,arg2)       #will be async
task.delay(arg1,arg2).get() #will be sync
task.delay(arg1,arg2).get() #will be sync
task.apply_async(args = [arg1,arg2], {'countdown' : some_seconds}) #async with delay

必要に応じて多くの呼び出しがありますが
、セロリ スケジューラを有効にするには -B フラグを付けてセロリを開始する必要があります

$ celery worker --app=tasks -B -Q my_queue,default_queue

したがって、タスクを整理する方法は個人的なものであり、プロジェクトの複雑さに依存しますが、同期の種類ごとに整理することは最善の選択肢ではないと思います.

このトピックをグーグルで検索しましたが、ガイドやアドバイスは見つかりませんでしたが、機能ごとにタスクを整理するいくつかのケースを読みました.
私のプロジェクトでは、これはパターンではないため、このアドバイスに従いました。ここで私がした方法の一例

your_app
    |
    -- reports
        |
        -- __init__.py
        -- foo_report.py
        -- bar_report.py
        -- tasks
            |
            -- __init__.py
            -- report_task.py
    -- maintenance
        |
        -- __init__.py
        -- tasks
            |
            -- __init__.py
            -- delete_old_stuff_task.py
    -- twitter
        |
        -- __init__.py
        -- tasks
            |
            -- __init__.py
            -- batch_timeline.py                
于 2014-07-24T07:24:50.310 に答える