1. 程式人生 > 實用技巧 >celery報錯錦集及解決方案

celery報錯錦集及解決方案

celery報錯錦集及解決方案

到網上查看了很多資料都沒有用 寫一個部落格記錄一下。

在view.py中呼叫非同步函式的時候導包除了問題。之前一直以為是絕地路徑。害~~~

import os, sys
from opwf.settings import BASE_DIR, SECRET_KEY
sys.path.insert(0, os.path.join(BASE_DIR, '../celery_task'))
from main import send_sms_code  # 必須這麼寫, 從main中導包

需要在配置celery的檔案內新增django環境

import django

# 1.新增django專案根路徑
CELERY_BASE_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(CELERY_BASE_DIR, '../opwf'))

# 2.新增django環境
os.environ.setdefault("DJANGO_SETTINGS_MODULE","opwf.settings")
django.setup() # 讀取配置

或者:

不要講 add_together 方法寫在主模組中,因為註冊時註冊的task為模組名.add_together, 而呼叫時task為 main.add_together

再或者:

不要將非同步任務函式的定義和呼叫寫到同一個檔案中

我們需要在整個django專案外執行命令 可以參考上方的目錄圖片。。。

celery -A celery_task worker -l info -P eventlet