我之前的一篇文章中寫了【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