Celeryユーザーガイド中国語翻訳-APplication
Celeryは、アプリケーションまたはアプリケーションと呼ばれる使用前にインスタンス化する必要があります.appはスレッドが安全であり、異なる構成、コンポーネント、taskを有する複数のCeleryアプリケーションが同じプロセス空間に共存することができる.
最後の行のテキスト化には、Celeryアプリケーションが表示されます.アプリケーションが属するクラスの名前、現在のメインモジュール名、およびメモリアドレスが含まれます.唯一重要な情報はモジュール名です.
Main Name
Celeryでtaskメッセージを送信する場合、このメッセージには実行するtaskの名前のみが含まれます.各workerは、
taskを定義すると、taskはローカルに登録されます.
Celeryがtask関数がどのモジュールに属するかを検出できない場合、mainモジュール名を使用して初期task名を生成します.
この方法は、次の2つのシーンにのみ適用されます. taskを定義するモジュールはプログラムとして を実行する. app python shellに を作成
tasksを直接実行すると.py、task名は
メインモジュール名を直接指定することもできます.
Configuration
Celeryは、直接設定するか、専用構成モジュールを使用して構成できます.
または、
config_from_object
モジュール名appを使用する.config_from_object()メソッドは、pythonモジュールの完全修飾名(
モジュールオブジェクトを使用して、インポートしたモジュールオブジェクトを転送することもできますが、これは推奨されません.
prefork poolを使用する場合、モジュールをシーケンス化する必要がないため、モジュール名を使用する方法がより推奨されます.実際のアプリケーションで構成の問題やシーケンス化のエラーが発生した場合は、モジュール名を使用してみてください.
構成クラスまたはオブジェクトの使用
config_from_envvar
環境変数を使用して構成モジュールを指定します.
Censored configuration
Celery構成を表示する場合は、パスワード、キーなどの機密情報をフィルタする必要があります.Celeryは、表示構成を支援するいくつかの実用的な方法を提供しています.
humanize()このメソッドは、行ごとに文字列形式の構成を返します.デフォルトには変更された構成のみが含まれます.組み込みのデフォルト構成を表示する場合は、
table()このメソッドは、辞書形式の構成を返します.
Celeryは、正規表現一致キーを使用して削除するかどうかを判断するため、すべての機密情報を除去しません.ユーザーが機密情報を含むカスタム構成を追加した場合は、Celeryが機密構成としてマークされている可能性のある名前(API、TOKEN、KEY、SECRET、PASS、SIGNATURE、DATABASE)を使用して名前を付けることができます.
Laziness
適用例は不活性である.
Celeryインスタンスを作成すると、次の操作のみが実行されます. event用の を作成する作成 は現在のアプリケーション( に設定. を呼び出す.
次の例では、taskを使用するか、プロパティにアクセスする前にtaskは作成されません.
アプリケーションのアプリケーション間で共有する必要があるtaskをコピーします.taskのデフォルトは共有ですが、task装飾器の すべての処理対象task装飾品 を評価するは、すべてのtaskが現在のアプリケーションにバインドされていることを確認します.taskをアプリケーションにバインドして、構成からデフォルト値を読み込むことができます.
Breaking the chain
現在のアプリケーションに依存してもよいが、アプリケーションインスタンスを
開発モードでCELERY_を設定するTRACE_APP環境変数は、アプリケーションチェーンの切断時に異常を放出することができます.
Abstract Tasks を指定する. を指定する.
# Celery
>>> from celery import Celery
>>> app = Celery()
>>> app
最後の行のテキスト化には、Celeryアプリケーションが表示されます.アプリケーションが属するクラスの名前、現在のメインモジュール名、およびメモリアドレスが含まれます.唯一重要な情報はモジュール名です.
Main Name
Celeryでtaskメッセージを送信する場合、このメッセージには実行するtaskの名前のみが含まれます.各workerは、
task registry
と呼ばれるtask名と対応する関数のマッピングを維持します.taskを定義すると、taskはローカルに登録されます.
>>> @app.task
... def add(x, y):
... return x + y
>>> add
>>> add.name
__main__.add
>>> app.tasks['__main__.add']
Celeryがtask関数がどのモジュールに属するかを検出できない場合、mainモジュール名を使用して初期task名を生成します.
この方法は、次の2つのシーンにのみ適用されます.
# tasks.py
from celery import Celery
app = Celery()
@app.task
def add(x, y): return x + y
if __name__ == '__main__':
app.worker_main()
tasksを直接実行すると.py、task名は
__main__
を接頭辞とするが、tasks.pyは他のプログラムにインポートされ、task名はtasks
を接頭辞とする.次のようになります.>>> from tasks import add
>>> add.name
tasks.add
メインモジュール名を直接指定することもできます.
>>> app = Celery('tasks')
>>> app.main
'tasks'
>>> @app.task
... def add(x, y):
... return x + y
>>> add.name
tasks.add
Configuration
Celeryは、直接設定するか、専用構成モジュールを使用して構成できます.
app.conf
プロパティで構成を表示または直接設定します.>>> app.conf.timezone
'Europe/London'
>>> app.conf.enable_utc = True
または、
app.conf.update
の方法で複数の構成を一度に更新します.>>> app.conf.update(
... enable_utc=True,
... timezone='Europe/London',
...)
config_from_object
app.config_from_object()
メソッドは、構成モジュールまたはオブジェクトから構成をインポートします.注:config_を呼び出すfrom_object()メソッドは、その前に構成された設定をリセットします.モジュール名appを使用する.config_from_object()メソッドは、pythonモジュールの完全修飾名(
fully qualified name
)または「celeryconfig」、「myproj.config.celery」、または「myproj.config:CeleryConfig」などの特定の属性名を受信する.from celery import Celery
app = Celery()
app.config_from_object('celeryconfig')
import celeryconfig
を正常に実行できればappは正常に構成できます.モジュールオブジェクトを使用して、インポートしたモジュールオブジェクトを転送することもできますが、これは推奨されません.
import celeryconfig
from celery import Celery
app = Celery()
app.config_from_object(celeryconfig)
prefork poolを使用する場合、モジュールをシーケンス化する必要がないため、モジュール名を使用する方法がより推奨されます.実際のアプリケーションで構成の問題やシーケンス化のエラーが発生した場合は、モジュール名を使用してみてください.
構成クラスまたはオブジェクトの使用
from celery import Celery
app = Celery()
class Config:
enable_utc = True
timezone = 'Europe/London'
app.config_from_object(Config)
config_from_envvar
app.config_from_envvar()
メソッドは、環境変数から構成モジュール名を受信する.import os
from celery import Celery
#: Set default configuration module name
os.environ.setdefault('CELERY_CONFIG_MODULE', 'celeryconfig')
app = Celery()
app.config_from_envvar('CELERY_CONFIG_MODULE')
環境変数を使用して構成モジュールを指定します.
$ CELERY_CONFIG_MODULE="celeryconfig.prod" celery worker -l info
Censored configuration
Celery構成を表示する場合は、パスワード、キーなどの機密情報をフィルタする必要があります.Celeryは、表示構成を支援するいくつかの実用的な方法を提供しています.
humanize()このメソッドは、行ごとに文字列形式の構成を返します.デフォルトには変更された構成のみが含まれます.組み込みのデフォルト構成を表示する場合は、
with_defaults
パラメータをTrueに設定します.>>> app.conf.humanize(with_defaults=False, censored=True)
table()このメソッドは、辞書形式の構成を返します.
>>> app.conf.table(with_defaults=False, censored=True)
Celeryは、正規表現一致キーを使用して削除するかどうかを判断するため、すべての機密情報を除去しません.ユーザーが機密情報を含むカスタム構成を追加した場合は、Celeryが機密構成としてマークされている可能性のある名前(API、TOKEN、KEY、SECRET、PASS、SIGNATURE、DATABASE)を使用して名前を付けることができます.
Laziness
適用例は不活性である.
Celeryインスタンスを作成すると、次の操作のみが実行されます.
logical clock instance
task registry
set_as_current
パラメータが無効でない限り)app.on_init()
コールバック関数(デフォルトでは何も行わない)app.task()
デコレーションは、task定義時に直ちにtaskを作成するのではなく、task使用時またはfinalized
適用後に作成されます.次の例では、taskを使用するか、プロパティにアクセスする前にtaskは作成されません.
>>> @app.task
>>> def add(x, y):
... return x + y
>>> type(add)
>>> add.__evaluated__()
False
>>> add #
>>> add.__evaluated__()
True
アプリケーションの
Finalization
は、app.finalize()
メソッドを明示的に呼び出すか、またはappに暗黙的にアクセスすることを指す.tasksプロパティ.finalized
アプリケーション:shared
プロパティが無効になっている場合は、アプリケーションプライベートに属します.Breaking the chain
現在のアプリケーションに依存してもよいが、アプリケーションインスタンスを
app chain
と呼ぶことができる任意の必要なオブジェクトに渡すのがベストプラクティスである.# (bad)
from celery import current_app
class Scheduler(object):
def run(self):
app = current_app
# (good)
class Scheduler(object):
def __init__(self, app):
self.app = app
開発モードでCELERY_を設定するTRACE_APP環境変数は、アプリケーションチェーンの切断時に異常を放出することができます.
$ CELERY_TRACE_APP=1 celery worker -l info
Abstract Tasks
task()
デコレーションを使用して作成されたtaskは、celery.app.task
モジュールのTask
ベースクラスから継承されます.クラスを継承するとtaskクラスをカスタマイズできます.from celery import Task
# from celery.app.task import Task
class DebugTask(Task):
def __call__(self, *args, **kwargs):
print('TASK STARTING: {0.name}[{0.request.id}]'.format(self))
return super(DebugTask, self).__call__(*args, **kwargs)
__call__()
メソッドを書き換える場合は、superを呼び出してください.これによりtaskが直接呼び出されると、ベースクラスのデフォルトイベントが実行されます.Task
ベースクラスは、特定のアプリケーションにバインドされていないため、特殊です.taskがアプリケーションにバインドされると、デフォルト値などを設定するために構成が読み込まれます.base
パラメータによりベースクラス@app.task(base=DebugTask)
def add(x, y):
return x + y
app.Task
属性によりベースクラス>>> from celery import Celery, Task
>>> app = Celery()
>>> class MyBaseTask(Task):
... queue = 'hipri'
>>> app.Task = MyBaseTask
>>> app.Task
>>> @app.task
... def add(x, y):
... return x + y
>>> add
>>> add.__class__.mro()
[>,
,
,
]