django+celery實現異步任務

在django項目中經常須要有些耗時的任務,好比發送郵件、短信啥的,這種狀況使用celery就很是有用了。celery有原生的也有第三方封裝的django-celery,可是django-celery更新不及時,並且不支持celery4,這都出來兩年了(看下commit 這兩年半django-celery也沒怎麼提交新的代碼), 若是你使用的是(<celery4.0)+(<=django1.8)能夠考慮使用他不然請不要使用(2018.04.10是這樣,當你看到的時候我不肯定有沒有更新,請自行決定)。因爲我使用的是django1.11版本因此我只能使用原生的celery
官方文檔
1.安裝html

pip install celery

2.broker,我這裏使用的是redis,官方更推薦使用librabbitmqpython

pip install celery[redis]

3.django集成官方文檔git

  1. 啓動broker
celery -A <proj_name> worker -l info

我這裏報錯提示Celery ValueError: not enough values to unpack (expected 3, got 0)
issue裏有這個問題的解決辦法
4.1 pip安裝eventletgithub

pip install eventlet

4.2 啓動參數redis

celery -A <proj_name> worker -l info -P eventlet

5.關於序列化方式
在celery3.x 默認的序列化方式是pickle,但在celery4.x已經變成了json,json更爲通用 問題也少,可是卻不能序列化字節碼,個人需求中出現了字節碼序列化的要求因此必須修改一下配置django

CELERY_RESULT_SERIALIZER = 'pickle'
CELERY_TASK_SERIALIZER = 'pickle'
CELERY_ACCEPT_CONTENT = ['application/x-python-serialize']
  1. 關於結果的過時時間
    若是線上項目不停的運行積累的任務結果也愈來愈多,確定會撐爆redis,默認結果只會保存5000條,可是這不能徹底知足個人需求 ,若是能設置過時時間就行了,issue上有個結果 可是通過測試無效

celery的所有配置項json

相關文章
相關標籤/搜索