Django+Celery學習筆記2——redis異步執行定時任務demo

  引言

  前面一篇文章已經介紹了celery相關知識,有興趣能夠看官方文檔深刻了解。下面介紹一下使用redis做爲消息中間件來使用celery異步執行定時任務。python

  簡介

  先看一下草圖:redis

 

 

  Celery異步任務示例

  先準備環境:app

redis == 3.2.1
celery ==  4.3.0
python == 3.6.5

  新建一個項目testcelery,爲celery應用建立一個模塊。對於小的應用,一般的作法是把全部代碼放在一個叫tasks.py的文件中異步

import celery
from celery.schedules import crontab
app = celery.Celery('tasks',broker='redis://127.0.0.1:6379/0')

@app.task
def test(*args):
    print(args)

  ask 是Celery中最基本的單元。Celery有不少裝飾器來定義task,只須要編寫一個函數而且加上一個裝飾器,就能註冊一個能異步執行的任務,再新建一個test.py:函數

from tasks import  *

test.delay('開始測試')

  在執行異步任務時,要保證redis服務是啓動的,如圖:學習

 

 

   而後進入你tasts.py文件所在目錄下,執行命令:測試

celery -A tasks worker --loglevel=info

  若是是win10,而且使用我上面的環境,還須要安裝一個3d

pip install eventlet

  否則worker會報錯,如:中間件

ValueError: not enough values to unpack (expected 3, got 0)

  使用新的命令如:blog

celery -A <mymodule> worker -l info -P eventlet

  出現這個就證實異步任務服務啓動正常,如圖:

 

 

  咱們執行調用函數,測試一下:

 

 

   結果符合預期,正常異步執行任務成功!

  Celery定時任務示例

  上面介紹了異步任務,如今固然要使用定時任務看看。

  在tasks.py文件中,增長以下代碼

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # Calls test('hello') every 10 seconds.
    sender.add_periodic_task(10.0, test.s('learn'), name='add every 10')

    # Calls test('world') every 30 seconds
    sender.add_periodic_task(30.0, test.s('python'), expires=10)

    # Executes every Monday morning at 7:30 a.m.
    sender.add_periodic_task(
        crontab(hour=7, minute=30, day_of_week=1),
        test.s('Hard Work!'),
    )

  定時任務須要啓動一個監控服務beat來監聽心跳,仍是進入tasks.py文件所在目錄,執行命令:

 celery -A tasks beat

  

 

  運行結果:

 

  總結

  以上就是python+celery示例,深刻了解能夠學習官方文檔:https://docs.celeryproject.org/en/latest/ 。另外有喜歡學習和交流探討的朋友,加入咱們交流羣~

相關文章
相關標籤/搜索