0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Django的Celery異步任務(wù)和定時(shí)任務(wù)的實(shí)戰(zhàn)教程

科技綠洲 ? 來源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-11-02 10:45 ? 次閱讀

Django與Celery是基于Python進(jìn)行Web后端開發(fā)的核心搭配,在運(yùn)營開發(fā)(即面向企業(yè)內(nèi)部)的場景中非常常見。

下面是基于Django的Celery異步任務(wù)和定時(shí)任務(wù)的實(shí)戰(zhàn)教程,大家覺得有用的話點(diǎn)個(gè)贊/在看吧!

1.配置Django Celery

配置celery主要有幾點(diǎn):

  1. 在settings.py的同級目錄下,創(chuàng)建celery.py文件(名字自己隨意?。?,這個(gè)文件主要是用來生成celery的實(shí)例app.

圖片

我們將 celery 實(shí)例的 broker 和 backend 都設(shè)為了redis.

其中 broker 的意思是“經(jīng)紀(jì)人”,像股票經(jīng)紀(jì)人一樣,是用于促成“交易”的,Celery中它的職責(zé)就是給 worker 推送任務(wù)。

而backend的職責(zé)是存放執(zhí)行信息和結(jié)果,這些數(shù)據(jù)需要被持久化存于數(shù)據(jù)庫。但為了簡化問題,我們將其與broker一樣放置于redis當(dāng)中。

  1. 需要你在自己已經(jīng)創(chuàng)建的app(不是celery的app,而是django項(xiàng)目的app)目錄下面,創(chuàng)建task.py文件(這個(gè)文件名只能是這個(gè))

圖片

因?yàn)镃elery會(huì)統(tǒng)一從每個(gè)app下面的tasks里面監(jiān)聽任務(wù)。

  1. 編寫tasks.py的任務(wù)

看一下tasks內(nèi)部的任務(wù)如何寫:

圖片

任務(wù)的目標(biāo)是延遲3秒后,返回一個(gè)語句。

  1. init.py中的設(shè)置

這個(gè)是非常關(guān)鍵的一點(diǎn),如何讓django在啟動(dòng)的時(shí)候,也把celery給啟動(dòng)了呢?
答案是在項(xiàng)目的init文件內(nèi),導(dǎo)入celery的app

圖片

2.Django 其他配置

為了能夠觸發(fā)該異步任務(wù),我們接下來配置一些常規(guī)文件,views和url,首先是views函數(shù):

圖片

然后是url:

path('test_c', test_c, name='test_c'),

3.進(jìn)行測試

首先,運(yùn)行django項(xiàng)目

python manage.py runserver

這樣,django項(xiàng)目和celery的app就被一起啟動(dòng)了,但是這個(gè)時(shí)候是無法執(zhí)行這個(gè)task的,因?yàn)閣orker沒有被啟動(dòng),我們可以試一下:

訪問: http://127.0.0.1:8000/stats/test_c

會(huì)得到以下報(bào)錯(cuò):

圖片

正確的姿勢是怎么樣的?需要先激活worker,然后再訪問API

celery -A NBAsite worker -l info

結(jié)果如下:

圖片

從上圖下方的log信息里可以看到,在延遲了3秒后,任務(wù)啟動(dòng)并返回字符串,而在頁面上,也可以看到成功返回。

需要注意的是,如果你修改了tasks的內(nèi)容,是需要重啟celery才能生效的,最簡單的方法就是重啟django項(xiàng)目。

這樣,我們就完成了簡單的異步任務(wù)的配置和使用。

4.定時(shí)任務(wù)配置

在異步任務(wù)中,我們只用到了worker,而在定時(shí)任務(wù)中,還要用到celery的beat調(diào)度器。

首先來看下如何配置定時(shí)任務(wù),或者說如何配置這個(gè)調(diào)度器。

還是在celery.py里面進(jìn)行配置:

圖片

重點(diǎn)是增加了app.conf.beat_schedule這個(gè)定時(shí)任務(wù)配置,指定了 stats 文件夾下 tasks.py 中的auto_sc函數(shù),定時(shí)于20:47分執(zhí)行。

5.具體任務(wù)頁面tasks

增加一個(gè)對應(yīng)要做定時(shí)任務(wù)的task

@shared_task
def auto_sc():
    print ('sc test?')
    return 'halo'

6.運(yùn)行命令和結(jié)果

命令的話可以將激活worker和激活beat合并在一起,如下:

celery -A NBAsite worker -B -l info

不過,windows不被允許這么使用,因此在windows環(huán)境下,你需要同時(shí)打開worker和beater:

celery -A NBAsite worker -l info
celery -A NBAsite beat -l info

圖片

看上圖下方的log可知定時(shí)任務(wù)被成功執(zhí)行。至此便完成了定時(shí)任務(wù)的配置與執(zhí)行。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3752

    瀏覽量

    64229
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4767

    瀏覽量

    84375
  • Django
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    10357
收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于stm32系統(tǒng)定時(shí)任務(wù)的問題

    在用stm32做一個(gè)飛控程序時(shí)。需要用到上面這種系統(tǒng)循環(huán)定時(shí)任務(wù),有一個(gè)問題:在System_Task_Loop函數(shù)里面,有1ms 、2ms、5ms的循環(huán)任務(wù),但是他的這些定時(shí)是怎么得到的?是隨便
    發(fā)表于 10-10 23:43

    Linux系統(tǒng)定時(shí)任務(wù)Crond

    會(huì)定期(默認(rèn)每分鐘檢查一次)檢查系統(tǒng)中是否有要執(zhí)行的任務(wù)工作,如果有,便會(huì)根據(jù)其預(yù)先設(shè)定的定時(shí)任務(wù)規(guī)則自動(dòng)執(zhí)行該定時(shí)任務(wù)工作,這個(gè)crond定時(shí)任務(wù)服務(wù)就相當(dāng)于我們平時(shí)早起使用的鬧鐘一
    發(fā)表于 07-05 06:22

    linux的循環(huán)定時(shí)任務(wù)

    linux循環(huán)定時(shí)任務(wù)
    發(fā)表于 05-20 14:59

    ucos iii定時(shí)任務(wù)有什么用?

    ucos iii 的定時(shí)任務(wù)有什么用,通過定時(shí)任務(wù)定時(shí)與普通的調(diào)用系統(tǒng)定時(shí)函數(shù)定時(shí)有什么區(qū)別?
    發(fā)表于 10-07 06:16

    定時(shí)任務(wù)的發(fā)展史是怎么樣的

    定時(shí)任務(wù)是互聯(lián)網(wǎng)行業(yè)里最常用的服務(wù)之一,本文給大家介紹定時(shí)任務(wù)在我司的發(fā)展歷程。 linux系統(tǒng)中一般使用crontab命令來實(shí)現(xiàn),在Java世界里,使用最廣泛的就是quartz了。我司
    發(fā)表于 07-18 17:38 ?0次下載
    <b class='flag-5'>定時(shí)任務(wù)</b>的發(fā)展史是怎么樣的

    SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)

    在spring boot項(xiàng)目中,可以通過 @EnableScheduling 注解和@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù),也可以通過SchedulingConfigurer接口來實(shí)現(xiàn)定時(shí)任務(wù)。但是
    的頭像 發(fā)表于 09-24 09:49 ?2903次閱讀
    SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)增刪啟停<b class='flag-5'>定時(shí)任務(wù)</b>

    Python定時(shí)任務(wù)的實(shí)現(xiàn)方式

    在日常工作中,我們常常會(huì)用到需要周期性執(zhí)行的任務(wù),一種方式是采用 Linux 系統(tǒng)自帶的 crond 結(jié)合命令行實(shí)現(xiàn)。另外一種方式是直接使用Python。接下來整理的是常見的Python定時(shí)任務(wù)
    的頭像 發(fā)表于 10-08 15:20 ?5549次閱讀

    解析Golang定時(shí)任務(wù)庫gron設(shè)計(jì)和原理

    正巧,最近看到了 gron 這個(gè)開源項(xiàng)目,它是用 Golang 實(shí)現(xiàn)一個(gè)并發(fā)安全的定時(shí)任務(wù)庫。實(shí)現(xiàn)非常簡單精巧,代碼量也不多。今天我們就來一起結(jié)合源碼看一下,怎樣基于 Golang 的能力做出來一個(gè)【定時(shí)任務(wù)庫】。
    的頭像 發(fā)表于 12-15 13:57 ?1272次閱讀

    求一種SpringBoot定時(shí)任務(wù)動(dòng)態(tài)管理通用解決方案

    SpringBoot的定時(shí)任務(wù)的加強(qiáng)工具,實(shí)現(xiàn)對SpringBoot原生的定時(shí)任務(wù)進(jìn)行動(dòng)態(tài)管理,完全兼容原生@Scheduled注解,無需對原本的定時(shí)任務(wù)進(jìn)行修改
    的頭像 發(fā)表于 02-03 09:49 ?743次閱讀

    在Spring Boot中如何使用定時(shí)任務(wù)

    本文介紹在 Spring Boot 中如何使用定時(shí)任務(wù),使用非常簡單,就不做過多說明了。
    的頭像 發(fā)表于 04-12 10:56 ?936次閱讀

    如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)?

    如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)?那么我們一起看看具體怎么實(shí)現(xiàn),先看下本節(jié)大綱: (1)思路說明; (2)代碼解析; (3)修改定時(shí)任務(wù)執(zhí)行周期特別說明;
    的頭像 發(fā)表于 04-12 11:06 ?1045次閱讀

    Linux如何使用cron進(jìn)行定時(shí)任務(wù)的操作

    按計(jì)劃執(zhí)行命令對于計(jì)算機(jī)來說非常重要,因?yàn)榧偃缥矣H自去執(zhí)行一些任務(wù)的話,可能會(huì)因?yàn)槎喾矫嬉蛩夭荒馨磿r(shí)執(zhí)行,所以定時(shí)任務(wù)就顯得非常重要了! cron就是一個(gè)能夠執(zhí)行定時(shí)任務(wù)的命令,其實(shí)該命令本身不難,下面小編帶您詳細(xì)了解!
    的頭像 發(fā)表于 05-12 16:27 ?2017次閱讀

    python定時(shí)任務(wù)實(shí)踐

    由于程序需求,監(jiān)測配置變化需要設(shè)置定時(shí)任務(wù),每分鐘執(zhí)行一次,對任務(wù)持久化要求不高,不需要時(shí)可以關(guān)閉定時(shí)任務(wù)
    的頭像 發(fā)表于 05-20 17:53 ?947次閱讀
    python<b class='flag-5'>定時(shí)任務(wù)</b>實(shí)踐

    Celery Beat 的周期調(diào)度機(jī)制及實(shí)現(xiàn)原理

    基于Django從制作一個(gè)簡單的周期任務(wù)開始,然后一步一步拆解 Celery Beat 的源代碼。 相關(guān)前置應(yīng)用知識,可以閱讀以下文章: 實(shí)戰(zhàn)教程!
    的頭像 發(fā)表于 10-31 15:24 ?655次閱讀

    linux定時(shí)任務(wù)的用法總結(jié)

    習(xí)慣了使用 windows 的計(jì)劃任務(wù),使用 linux 中的 crontab 管理定時(shí)任務(wù)時(shí)很不適應(yīng)。
    的頭像 發(fā)表于 08-14 18:16 ?782次閱讀
    linux<b class='flag-5'>定時(shí)任務(wù)</b>的用法總結(jié)