Celery學習筆記----趟一下 celery 的坑
阿新 • • 發佈:2018-11-04
celery中文文件
那麼什麼是Celery呢?
Celery是一個用Python開發的非同步的分散式任務排程模組。
Celery本身不包含訊息服務,使用第三方訊息服務,也就是Broker,來傳遞任務,目前支援的有Rebbimq,Redis,資料庫以及其他的一些比如Amazon SQS,Monogdb和IronMQ 。
因為專案裡面用的是Redis,所以這裡以Redis作為Broker。
安裝
pip install celery 使用Redis作為Broker的話,可以兩者一塊安裝 sudo pip install -U celery[redis] 當然如果正式生產環境中,有可能redis伺服器和Celery在不同的機器上面的話,就要兩者單獨安裝 sudo apt-get install redis-server 這個命令可以安裝redis,包括了redi-cli工具
第一個例子:
這是在celery中文文件中的程式碼,你需要修改成自己的
from celery import Celery
app = Celery('hello', broker='amqp://[email protected]//')
@app.task
def hello():
return 'hello world'
我是把程式碼儲存為celery_tasks資料夾下的tasks.py檔案(這個例子執行在ubuntu下的,上面運行了Redis,所以broker可以是127.0.0.1或者自己設定的ip)。
然後在終端下啟動worker。
celery -A celery_tasks.tasks worker -l info
這個命令會啟動一個worker來執行task。執行完這條命令後,不出意外的出現下面這個介面的話表示worker已經啟動成功,正在等待執行任務。
我的發郵件功能用到celery
但是在中間遇到了一個bug
看了半天大致瞭解到
是celery 執行時 需要 讀取django 中的資訊
所以又在tasks下 加了下面的程式碼:
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh.settings")
django.setup()
又執行 發現可以了
還有一個bug
MISCONF Redis被配置為儲存RDB快照,但目前無法在磁碟上存留。可能修改資料集的命令被禁用。請檢查Redis日誌,瞭解有關錯誤的詳細資訊
關鍵程式碼:
config set stop-writes-on-bgsave-error no
總結:
如果你要將你的celery 在另一臺電腦上執行
1.將你的專案程式碼拷貝過去
2.把這個任務加上下面的程式碼
# import os
# import django
# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh.settings")
# django.setup()
3. celery -A celery_tasks.tasks worker -l info
4.django 想要執行 那麼安裝的所有的包 都得拷貝過去
5.步驟 先將本地匯出,再在另一臺電腦 一次性 安裝
6.pip freeze > ~/dailyfresh.txt
7.pip install -r ~/dailyfresh.txt -i xx xxxxxx
8.如果你的任務執行時間比較長 用celery進行非同步執行
9.celery 還有一個定時器的功能 time.sleep()
10.celery 執行時 需要 讀取django 中的資訊
所以要在任務下買你加上2中的程式碼
否則報錯
django.core.exceptions.ImproperlyConfigured: Requested setting EMAIL_BACKEND,
but settings are not configured. You must either define the environment variable
DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
11.執行前 需要 啟動redis 服務 因為redis 是資料庫