使用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依賴(lài)
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)文章
Python random模塊用法解析及簡(jiǎn)單示例
這篇文章主要介紹了Python random模塊用法解析及簡(jiǎn)單示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12python使用pipeline批量讀寫(xiě)redis的方法
今天小編就為大家分享一篇python使用pipeline批量讀寫(xiě)redis的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02Python基于多線(xiàn)程實(shí)現(xiàn)ping掃描功能示例
這篇文章主要介紹了Python基于多線(xiàn)程實(shí)現(xiàn)ping掃描功能,結(jié)合實(shí)例形式分析了Python多線(xiàn)程與進(jìn)程相關(guān)模塊調(diào)用操作技巧,需要的朋友可以參考下2018-07-07Python命令行參數(shù)解析包argparse的使用詳解
argparse?是?python?自帶的命令行參數(shù)解析包,可以用來(lái)方便的服務(wù)命令行參數(shù)。本文將通過(guò)示例和大家詳細(xì)講講argparse的使用,需要的可以參考一下2022-09-09通過(guò) Django Pagination 實(shí)現(xiàn)簡(jiǎn)單分頁(yè)功能
這篇文章主要介紹了通過(guò) Django Pagination 實(shí)現(xiàn)簡(jiǎn)單分頁(yè)功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11Mac中升級(jí)Python2.7到Python3.5步驟詳解
本篇文章主要介紹了Mac中升級(jí)Python2.7到Python3.5步驟詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04