並行Python框架Celery的配置方法

一、Configuration

Celery,做爲一個consumer工具不須要太多的操做。它有輸入和輸出通道,經過輸入通道鏈接到broker(如AMQP服務Channel)或者經過輸出通道鏈接到結果的backend(用於獲取結果,不是必須的,由於有的操做只是單向分發任務)。 這一些控制經過制定一些配置參數來完成。html

缺省的配置對大多數使用場景已足夠,但不少時候可能須要本身的設置。熟悉可配置的選項是一個好主意這裏是參考:Configuration and defaultspython

配置能夠在應用裏直接設置或者經過配置模塊(也是一個Python文件,而不是一個特殊的格式,真是一個好主意!)。 下面給出任務數據序列化的這個例子:CELERY_TASK_SERIALIZERjson

app.conf.CELERY_TASK_SERIALIZER = 'json'

若是要配置不少參數,使用update方法:app

app.conf.update(
    CELERY_TASK_SERIALIZER='json',
    CELERY_ACCEPT_CONTENT=['json'],  # Ignore other content
    CELERY_RESULT_SERIALIZER='json',
    CELERY_TIMEZONE='Europe/Oslo',
    CELERY_ENABLE_UTC=True,)

二、使用配置文件

對於大的項目使用特定的配置模塊是一好主意,尤爲是對於週期性的任務或者任務路由等參數,不建議使用硬編碼的方法。並且最好將配置文件保存在一箇中心存儲區域,以便於實施集中化的管理、遷移和部署,減小配置錯誤帶來的問題。ide

告訴Celery的運行實例使用給定的配置文件,調用 app.config_from_object() 方法:工具

app.config_from_object('celeryconfig')

這個模塊常常命名爲「celeryconfig」, 可是你能夠使用任何其它的名字,由於這其實也是一個Python模塊。ui

這個配置模塊 celeryconfig.py 必須在Python可找到得的調用路徑之中, 看起來像這個樣子:編碼

celeryconfig.py:spa

BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TIMEZONE = 'Europe/Oslo'
CELERY_ENABLE_UTC = True

爲了檢驗這個配置參數正確,沒有語法錯誤,能夠像下面這樣import這個模塊:code

$ python -m celeryconfig

完整的配置參數參見: Configuration and defaults.

下面演示一下配置文件的強大能力,關於任務的路由, 把misbehaving放到特定的隊列中去:

celeryconfig.py:

CELERY_ROUTES = {
    'tasks.add': 'low-priority',}

能夠設置處理的頻率,下面的方式限制每分鐘只處理十個任務:

celeryconfig.py:

CELERY_ANNOTATIONS = {
    'tasks.add': {'rate_limit': '10/m'}}

若是使用RabbitMQ 或 Redis 做爲broker, 這個rate limit也能夠在運行時進行設置:

$ celery -A tasks control rate_limit tasks.add 10/m
worker@example.com: OK
    new rate limit set successfully

關於任務的路由更多的信息看這裏 Routing Tasks , 設置參數 CELERY_ANNOTATIONS , 或者 Monitoring and Management Guide 查看關於遠程控制命令的說明,能夠監控到你的Worker正在幹些什麼事情。

相關文章
相關標籤/搜索