91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-02 10:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

1.配置Django Celery

配置celery主要有幾點:

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

圖片

我們將 celery 實例的 broker 和 backend 都設為了redis.

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

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

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

圖片

因為Celery會統(tǒng)一從每個app下面的tasks里面監(jiān)聽任務。

  1. 編寫tasks.py的任務

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

圖片

任務的目標是延遲3秒后,返回一個語句。

  1. init.py中的設置

這個是非常關鍵的一點,如何讓django在啟動的時候,也把celery給啟動了呢?
答案是在項目的init文件內(nèi),導入celery的app

圖片

2.Django 其他配置

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

圖片

然后是url:

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

3.進行測試

首先,運行django項目

python manage.py runserver

這樣,django項目和celery的app就被一起啟動了,但是這個時候是無法執(zhí)行這個task的,因為worker沒有被啟動,我們可以試一下:

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

會得到以下報錯:

圖片

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

celery -A NBAsite worker -l info

結(jié)果如下:

圖片

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

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

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

4.定時任務配置

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

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

還是在celery.py里面進行配置:

圖片

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

5.具體任務頁面tasks

增加一個對應要做定時任務的task

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

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

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

celery -A NBAsite worker -B -l info

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

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

圖片

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

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

    關注

    7

    文章

    4016

    瀏覽量

    68326
  • python
    +關注

    關注

    57

    文章

    4876

    瀏覽量

    90012
  • Django
    +關注

    關注

    0

    文章

    45

    瀏覽量

    10869
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    關于stm32系統(tǒng)定時任務的問題

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

    Linux系統(tǒng)定時任務Crond

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

    linux的循環(huán)定時任務

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

    ucos iii定時任務有什么用?

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

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

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

    SpringBoot如何實現(xiàn)動態(tài)增刪啟停定時任務

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

    Python定時任務的實現(xiàn)方式

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

    解析Golang定時任務庫gron設計和原理

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

    求一種SpringBoot定時任務動態(tài)管理通用解決方案

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

    在Spring Boot中如何使用定時任務

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

    如何動態(tài)添加修改刪除定時任務

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

    Linux如何使用cron進行定時任務的操作

    按計劃執(zhí)行命令對于計算機來說非常重要,因為假如我親自去執(zhí)行一些任務的話,可能會因為多方面因素不能按時執(zhí)行,所以定時任務就顯得非常重要了! cron就是一個能夠執(zhí)行定時任務的命令,其實該命令本身不難,下面小編帶您詳細了解!
    的頭像 發(fā)表于 05-12 16:27 ?2719次閱讀

    python定時任務實踐

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

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

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

    linux定時任務的用法總結(jié)

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