Celery+django+redis異步執(zhí)行任務(wù)的實(shí)現(xiàn)示例
本文用到的各工具版本:
- celery 4.0.2
- django 1.10.3
- redis 3.2.6
特別注意:
如果你的項(xiàng)目是django框架,那么django-celery,celery-with-redis等等這些東西,都不要用了(這些東西會(huì)受python、celery版本的影響,我一直沒測(cè)通…)。直接pip安裝celery 4版本以上,pip安裝redis就完全可以的
1.安裝redis
二進(jìn)制文件是編譯完成后在src目錄下,通過下面的命令啟動(dòng)Redis服務(wù):
$ src/redis-server
你可以使用內(nèi)置的客戶端命令redis-cli進(jìn)行使用:
$ src/redis-cli redis> set foo bar OK redis> get foo “bar”
下載,解壓,編譯:
# wget http://download.redis.io/releases/redis-3.2.6.tar.gz # tar xzf redis-3.2.6.tar.gz # cd redis-3.2.6 # make # src/redis-server # 啟動(dòng)redis服務(wù),看清楚,這是在你的redis-3.2.6目錄下執(zhí)行的 # src/redis-cli # 啟動(dòng)客戶端
2.安裝celery,redis
# pip install celery # pip install redis
3.創(chuàng)建一個(gè)task
在django app目錄中創(chuàng)建tasks.py:
import time
from celery import task
@task()
def add(x, y):
return x + y
@task
def sendmail(mail):
print "++++++++++++++++++++++++++++++++++++"
print('sending mail to %s...' % mail['to'])
time.sleep(2.0)
print('mail sent.')
print "------------------------------------"
return mail['to']4.開啟worker
# celery -A tasks worker --loglevel=info
注意: 上面命令中的tasks是你創(chuàng)建的task所在的python 文件名稱。如果你創(chuàng)建的這個(gè)tasks.py文件在app文件夾內(nèi),那么你要這么執(zhí)行:
# celery -A app.tasks worker --loglevel=info
注意:每次更改tasks.py文件中的代碼后,都要重新執(zhí)行此命令!
5.試一下
>>> from app.tasks import * >>> sendmail.delay(dict(to='asd@as.com')) <AsyncResult: 694b6fa8-a123-4c22-9ba2-b77d7cbb066f> >>> add.delay(2, 15) <AsyncResult: 42d34419-4a34-49ab-9627-45428eaaeb38> >>> a=add.delay(1,1) >>> a.ready() True >>> a.get() 2 >>> a=add.delay(10,5) >>> a.get() 15
6.實(shí)例
# views.py
from app.tasks import add,sendmail
def task_workorder(request, id):
"""任務(wù)添加"""
# ......你的代碼......
sendmail.delay(dict(to='asd@as.com')) #申請(qǐng)人提交后會(huì)給審批人發(fā)郵件
# ......你的代碼......注意:如果執(zhí)行成功,你運(yùn)行celery -A app.tasks worker –loglevel=info命令的終端會(huì)打印一些內(nèi)容;如果執(zhí)行失敗,報(bào)一大把紅色代碼。。。那么恭喜你!出錯(cuò)了!這種錯(cuò)誤,一般都是與你傳的參數(shù)相關(guān),尤其在django框架下,不要將queryset這種數(shù)據(jù)查詢結(jié)果直接傳遞。
到此這篇關(guān)于Celery+django+redis異步執(zhí)行任務(wù)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Celery+django+redis異步執(zhí)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能
這篇文章主要介紹了基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
使用Python將TS文件轉(zhuǎn)換為MP4的操作方法
在多媒體處理中,將不同格式的視頻文件進(jìn)行轉(zhuǎn)換是一項(xiàng)常見的任務(wù),TS(Transport Stream)是一種常用的流媒體格式,而MP4則是更為廣泛使用的通用視頻格式,本文將介紹如何使用Python和FFmpeg工具將TS文件轉(zhuǎn)換為MP4文件,需要的朋友可以參考下2025-04-04
Python結(jié)合OCR實(shí)現(xiàn)從掃描件PDF中提取文本
掃描件 PDF 本質(zhì)是 “圖像集合”,無法直接復(fù)制或編輯文本,要提取其中的內(nèi)容,需借助OCR,下面我們就來看看如何通過 Python 結(jié)合 OCR 技術(shù)實(shí)現(xiàn)從掃描件 PDF 中提取文本吧2025-10-10
對(duì)Python中數(shù)組的幾種使用方法總結(jié)
今天小編就為大家分享一篇對(duì)Python中數(shù)組的幾種使用方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
python實(shí)現(xiàn)事件驅(qū)動(dòng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)事件驅(qū)動(dòng)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11

