標籤:cli read load ase 列印 app 進入 release 代碼
我之前的一篇文章中寫了【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 Celeryfrom celery.schedules import crontabapp = Celery(‘tasks‘, broker=‘redis://localhost:6379/0‘)@app.on_after_configure.connectdef 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.taskdef 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
Celery+python+redis非同步執行定時任務