使用celery執(zhí)行Django串行異步任務(wù)的方法步驟
前言
Django項(xiàng)目有一個(gè)耗時(shí)較長(zhǎng)的update過(guò)程,希望在接到請(qǐng)求運(yùn)行update過(guò)程的時(shí)候,Django應(yīng)用仍能正常處理其他的請(qǐng)求,并且update過(guò)程要求不能并行,也不能漏掉任何一個(gè)請(qǐng)求
使用celery的solo模式解決
安裝redis
https://github.com/microsoftarchive/redis/releases
下載.msi文件安裝,會(huì)直接將redis注冊(cè)為windows服務(wù)
安裝celery與redis依賴
pip install celery pip indatll redis
一個(gè)celery應(yīng)用
# celery_test.py
import time
from celery import Celery
app = Celery('tasks', broker='redis://127.0.0.1:6379/0')
@app.task
def add(x, y):
time.sleep(5)
return x + y
啟動(dòng)celery服務(wù)
celery -A celery_test.app worker --pool=solo -l info
查看完整的命令行參數(shù)列表
celery worker --help
對(duì)celery啟動(dòng)命令的解釋
- '-A' 是一個(gè)全局配置,定義了APP的位置
- '--pool' 是POOL的配置,默認(rèn)是prefork(并發(fā)),選擇solo之后,發(fā)送的任務(wù)不會(huì)被并發(fā)執(zhí)行,在worker執(zhí)行任務(wù)過(guò)程中,再次發(fā)送給worker的任務(wù)會(huì)排隊(duì),執(zhí)行完一個(gè)再執(zhí)行另一個(gè)
- '-l' 是WORKER的配置,定義了log級(jí)別
調(diào)用任務(wù)
>>> from celery_test import add >>> add.delay(4,4)
因?yàn)閱?dòng)了solo模式,因此,可以看到在一個(gè)add沒(méi)有執(zhí)行完前,即使再次發(fā)送執(zhí)行add的任務(wù),celery worker也會(huì)等到前一個(gè)任務(wù)執(zhí)行完才去執(zhí)行下一個(gè)
與Django結(jié)合
在裝載celery應(yīng)用前先setup django
import time
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo.settings")
django.setup()
from celery import Celery
from django_app.update import update
app = Celery('tasks', broker='redis://127.0.0.1:6379/0', backend='redis://127.0.0.1:6379/0')
@app.task
def update_task():
update()
然后在views中調(diào)用task就可以了。
from celery_test import update_task def update_api(request): if request.method == "GET": update_task.delay() return HttpResponse(status=status.HTTP_200_OK)
執(zhí)行過(guò)程中,程序的print信息會(huì)作為celery warning,報(bào)錯(cuò)信息會(huì)作為celery error
日志
在啟動(dòng)應(yīng)用的時(shí)候指定日志文件路徑
-f log_path
不設(shè)置這個(gè)參數(shù)的時(shí)候,日志默認(rèn)輸出到控制臺(tái)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Django+Celery實(shí)現(xiàn)動(dòng)態(tài)配置定時(shí)任務(wù)的方法示例
- 如何使用Celery和Docker處理Django中的定期任務(wù)
- Django實(shí)現(xiàn)celery定時(shí)任務(wù)過(guò)程解析
- 使用celery和Django處理異步任務(wù)的流程分析
- Django集成celery發(fā)送異步郵件實(shí)例
- django 實(shí)現(xiàn)celery動(dòng)態(tài)設(shè)置周期任務(wù)執(zhí)行時(shí)間
- django之使用celery-把耗時(shí)程序放到celery里面執(zhí)行的方法
- Django中celery執(zhí)行任務(wù)結(jié)果的保存方法
- Django-celery-beat動(dòng)態(tài)添加周期性任務(wù)實(shí)現(xiàn)過(guò)程解析
相關(guān)文章
使用pandas中的DataFrame數(shù)據(jù)繪制柱狀圖的方法
下面小編就為大家分享一篇使用pandas中的DataFrame數(shù)據(jù)繪制柱狀圖的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
使用python-Jenkins批量創(chuàng)建及修改jobs操作
這篇文章主要介紹了使用python-Jenkins批量創(chuàng)建及修改jobs操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
Python爬蟲(chóng)實(shí)現(xiàn)抓取電影網(wǎng)站信息并入庫(kù)
本文主要介紹了利用Python爬蟲(chóng)實(shí)現(xiàn)抓取電影網(wǎng)站信息的功能,并將抓取到的信息入庫(kù)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-02-02
最新tensorflow與pytorch環(huán)境搭建的實(shí)現(xiàn)步驟
深度學(xué)習(xí)相關(guān)的熱門框架主要為Tensorflow和Pytorch,本文主要介紹了搭建最新tensorflow與pytorch環(huán)境,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
Python requests模塊基礎(chǔ)使用方法實(shí)例及高級(jí)應(yīng)用(自動(dòng)登陸,抓取網(wǎng)頁(yè)源碼)實(shí)例詳解
這篇文章主要介紹了Python requests模塊基礎(chǔ)使用方法實(shí)例及高級(jí)應(yīng)用(自動(dòng)登陸,抓取網(wǎng)頁(yè)源碼,Cookies)實(shí)例詳解,需要的朋友可以參考下2020-02-02
總結(jié)分析python數(shù)據(jù)化運(yùn)營(yíng)關(guān)聯(lián)規(guī)則
本文內(nèi)容主要介紹了python數(shù)據(jù)化運(yùn)營(yíng)中關(guān)聯(lián)規(guī)則的一般應(yīng)用場(chǎng)景,以及關(guān)聯(lián)規(guī)則的實(shí)現(xiàn),并例舉了適應(yīng)的應(yīng)用示例,方便大家更直觀的理解應(yīng)用2021-08-08
python實(shí)現(xiàn)自動(dòng)網(wǎng)頁(yè)截圖并裁剪圖片
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自動(dòng)網(wǎng)頁(yè)截圖并裁剪圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
解決json.decoder.JSONDecodeError: Expecting value:&n
這篇文章主要介紹了解決json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)錯(cuò)誤,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04

