Celery 的學習筆記--tornado異步開發的好朋友

1.在tornado 中 使用 Celery

2.Celery的進階


2.1回調

官方文檔中把回調稱爲linking tasks。和回調差不多一個意思。這個回調怎麼用呢,請看下面例子。

這個link就相當於tornado中的callback了

add.apply_async((2,2),link = add.s(16))

這個函數返回的值爲20,這個20怎麼來呢?

其實就是先執行第一個任務add(2,2) ,第一個任返回的結果傳遞給回調函數,然後add(4,16).最後就的好20了。這個例子很簡單,

不過這個例子有個疑問—add.s(16),這個s是怎麼回事?突然出現這個s,而且以前沒有見過啊。

官網canvas guide裏有說明的,這個咱們簡單的學習一下。

>>>add.subtask((2, 2), countdown=10)
tasks.add(2, 2)

>>>add.s(2, 2)
tasks.add(2, 2)

add.s()就相當於subtask()方法,等於它的簡寫。


特殊變量

EAT(estimated time of arrival) 預計到達時間

result = add.apply_async((2, 2), countdown=3)
#我們通過countdown變量設置它
result.get()   
4

那麼這個變量的作用是什麼呢?我們可以給這個參數設定一個特殊的日期(date)或者時間(time),那麼在這個時間內這個函數是不會返回結果的。上面那個例子代表我們至少需要等待3秒才能得到返回結果。


Message Sending Retry

celey將會在事件連接的失敗時候自動重新連接,通過設置retry變量可以控制是否重新連接。比如retry=False表示連接失敗後不重連。

不過還有更高級的配置

add.apply_async((2, 2), retry=True, retry_policy={
    'max_retries': 5,
    'interval_start': 0,
    'interval_step': 0.2,
    'interval_max': 0.8,
})
  • max_retries :最大重連次數,設爲None表示無限次數的重連。
  • interval_start:第一次兩次重連的等待時間,單位秒,默認爲0
  • interval_max:重連登臺時間 的最大值默認0.2
  • nterval_step:重連時間增量的步長,默認0.2

    剛纔的例子裏重連的間隔從0開始,每次增長0.2s,當間隔到帶0.8的時候就不增長了。
    Serializers
    worker 返回來內容的格式。默認爲pickle python有專門的包。
    不過我們可是設置 json,pickle,ymal,msgpack。

 add.apply_async((10, 10), serializer='json')

不過每調用一次都要設置它不是很麻煩麼,我們可以定義celery設在它。這樣就不必每次都設置了。
通過CELERY_TASK_PUBLISH_RETRY 就可以了。
所有的設這內容都在這裏了


3.celery的配置(Configuration)


不過一般情況下我們不必對Celery進行配置哈,如果你有啥特殊的要求的話就需要了解這一方面了。

怎麼配置


配置的格式(等號連接)

## Broker settings.
BROKER_URL = 'amqp://guest:guest@localhost:5672//'

# List of modules to import when celery starts.
CELERY_IMPORTS = ('myapp.tasks', )

## Using the database to store task state and results.
CELERY_RESULT_BACKEND = 'db+sqlite:///results.db'

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

配置單個條目

app.conf.CELERY_TASK_SERIALIZER = 'json'

要配置多個

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,
)

常用的配置選項


CELERY_RESULT_BACKEND
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章