Celery+python+redis異步執行定時任務


我之前的一篇文章中寫了【Celery+django+redis異步執行任務】 
博文:http://blog.csdn.net/apple9005/article/details/54236212 
你會發現,這些代碼並不依賴django框架,隨便寫到一個py文件中,就可以輕松的執行成功,這是因為這些代碼並沒有用到django-celery,django-redis等依附於django框架的東西。 
今天,參照官方文檔示例,測試一下celery的異步執行定時任務如何。我先是在django框架內執行了一遍,沒有問題;現在直接寫個py文件,命令行下執行試試

1.環境搭建

通過pip 安裝 celery、redis 
pip install celery 
pip install redis

默認安裝celery 最新版是4.0.2 
默認安裝redis 最新版是2.10.5

另外不要忘記安裝redis服務:

# 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 # 啟動redis服務,看清楚,這是在你的redis-3.2.6目錄下執行的 # src/redis-cli # 啟動客戶端

2.編寫py

直接vim搞起了

$ vim tesks.py
from celery import Celery from celery.schedules import crontab app = Celery('tasks', broker='redis://localhost:6379/0') @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('hello'), name='add every 10') # Calls test('world') every 30 seconds sender.add_periodic_task(30.0, test.s('world'), 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('Happy Mondays!'), ) @app.task def test(arg): print(arg)

按住shift鍵+Z+Z,保存文件並退出

3.在新命令窗口中啟動redis服務

怎么啟動? 
進入你的redis目錄

$ cd redis-3.2.6 $ src/redis-3.2.6

4.在新窗口中啟動celery

進入你tasks.py所在目錄,執行:

$ celery -A tasks worker --loglevel=info

此時,異步服務已經可用了,但定時任務並沒有執行,怎么回事?你還需要再啟動另一服務,如下

5.在新窗口中啟動beat

還是要進入你tasks.py所在目錄,執行:

$ celery -A tasks beat

 

啟動后的樣子: 
這里寫圖片描述
看一下第4步的窗口,是不是有打印輸出?good!每隔10秒打印一次hello,每隔30秒打印一次world! 
這里寫圖片描述

具體你的項目要設置多長時間執行任務,可參見官方文檔的參數說明。 
附官方文檔地址:http://docs.celeryproject.org/en/latest/

附:如何監控Celery?

並行處理框架Celery的Web監控管理服務-Flower 
參見鏈接 
https://my.oschina.net/u/2306127/blog/420929 
http://flower-docs-cn.readthedocs.io/zh/latest/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM