標籤:
1、Configuration
Celery,作為一個consumer工具不需要太多的操作。它有輸入和輸出通道,通過輸入通道串連到broker(如AMQP服務Channel)或者通過輸出通道串連到結果的backend(用於擷取結果,不是必須的,因為有的操作只是單向分發任務)。 這一些控制通過制定一些配置參數來完成。
預設的配置對大多數使用情境已足夠,但很多時候可能需要自己的設定。熟悉可配置的選項是一個好主意這裡是參考:Configuration and defaults 。
配置可以在應用裡直接設定或者通過配置模組(也是一個Python檔案,而不是一個特殊的格式,真是一個好主意!)。 下面給出任務資料序列化的這個例子:CELERY_TASK_SERIALIZER
:
app.conf.CELERY_TASK_SERIALIZER = ‘json‘
如果要配置很多參數,使用update方法:
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,)
2、使用設定檔
對於大的項目使用特定的配置模組是一好主意,尤其是對於周期性的任務或者任務路由等參數,不建議使用硬式編碼方法。而且最好將設定檔儲存在一個中心儲存地區,以便於實施集中化的管理、遷移和部署,減少配置錯誤帶來的問題。
告訴Celery的運行執行個體使用給定的設定檔,調用 app.config_from_object()
方法:
app.config_from_object(‘celeryconfig‘)
這個模組經常命名為“celeryconfig
”, 但是你可以使用任何其它的名字,因為這其實也是一個Python模組。
這個配置模組 celeryconfig.py
必須在Python可找到得的調用路徑之中, 看起來像這個樣子:
celeryconfig.py
:
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這個模組:
$ 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[email protected]: OK new rate limit set successfully
關於任務的路由更多的資訊看這裡 Routing Tasks , 設定參數 CELERY_ANNOTATIONS
, 或者 Monitoring and Management Guide 查看關於遠端控制命令的說明,可以監控到你的Worker正在幹些什麼事情。
並行Python架構Celery的配置方法