如何快速將celery集成到項目

因為項目需要,經(jīng)常需要將 celery 引入工程,因為它不想其他包那樣安裝后就能使用,所以總結(jié)了以下步驟,方便快速接入。

以下基于 celery 4.4 和 django 4.1 版本

  1. 在需要異步任務(wù)的工程目錄(假設(shè)名字叫baseline)下添加 celery.py 文件如下
import os

from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')

app = Celery('proj')

app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

這一步有幾個注意點

  • settings.py 文件需要根據(jù)項目的實際情況進(jìn)行設(shè)置
  • celery.py 所在的python包需要加入 Django 的 INSTALLED_APPS, 因為后面要啟動單獨的進(jìn)程接收 celery 消息,沒有這一步的話會啟動失敗
  1. 在相同目錄下添加 tasks.py,用于編寫異步任務(wù)
import time

from baseline.celery import app
from baseline.security_manager import run_model_task


@app.task
def test():
    print('this is just a test')

可以看到這里引入的 celery.py 里定義的 app

  1. 配置 settings.py,主要是設(shè)置 broker
# 假設(shè)BROKER_URL在環(huán)境變量中定義
CELERY_BROKER_URL = os.getenv('BROKER_URL')

如果需要 celery beat 進(jìn)行定時任務(wù),還需要配置

CELERY_BEAT_SCHEDULE = {
    'filter-every-5-minutes': {
        'task': 'baseline.tasks.test',
        'schedule': 5 * 60,
    },
}
  1. 啟動 celery woker
[program:celery_worker]
directory=/app/code
user=root
command = celery -A baseline worker -l info -c 2 -Q celery
stdout_logfile = /app/log/celery_worker.log
redirect_stderr = true
autorestart = true

[program:celery_beat]
directory=/app/code
user=root
command = celery -A baseline beat -l info
stdout_logfile = /app/log/celery_beat.log
redirect_stderr = true
autorestart = true

經(jīng)過以上幾個步驟,就可以將 celery 成功接入到工程了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容