發佈系統:讓他晚上2點執行發佈的一串任務 定時任務html
更新訪問量: 晚上2點定時將數據從redis更新到mysql中去mysql
商城類的搶購工做:大批量的用戶涌入,承載不了一次性處理這麼多的活兒,用這個方式也能夠redis
注意要pip install selery==3.1.1??sql
windos下如何啓動flask
建立任務是當即建立成功的 對用戶友好,意思是能立刻看到個人任務被建立了 以下app
(拿到隨機字符串去檢測是否成功)async
代碼:見老師的 01_celery(技術分享)ide
目錄結構spa
代碼3d
celery.py
from celery import Celery from celery.schedules import crontab cel = Celery( 'tasks', broker='redis://127.0.0.1:6379', backend='redis://127.0.0.1:6379', include=['celery_tasks.s1','celery_tasks.s2'] )
s1.py
from .celery import cel @cel.task def hello1(*args, **kwargs): return "hello1"
s2.py
from .celery import cel @cel.task def hello2(*args, **kwargs): return "hello2"
app.py 調用celery中的內容,處理請求
import datetime from flask import Flask,request,render_template,redirect from celery.result import AsyncResult from celery_tasks.celery import cel from celery_tasks.s1 import hello1 app = Flask(__name__) TASK_LIST = [ ] @app.route('/index') def index(): """ 任務列表 :return: """ return render_template('index.html',tasks= TASK_LIST) @app.route('/add_task',methods=['GET','POST']) def add_task(): if request.method == 'GET': return render_template('add_task.html') else: title = request.form.get('title') # 在celery中添加一個任務 ctime = datetime.datetime.now() utc_ctime = datetime.datetime.utcfromtimestamp(ctime.timestamp()) ctime_x = utc_ctime + datetime.timedelta(seconds=10) # 在celery中添加任務 執行一個定時任務, result = hello1.apply_async(args=[1, 3], eta=ctime_x) TASK_LIST.append({'id':result.id,'title':title}) return redirect('/index') @app.route('/status') def status(): #查看任務狀態的功能 id = request.args.get('id') # 根據id查看任務狀態 try: async = AsyncResult(id=id, app=cel) # async.revoke(terminate=True) # 不管如今是何時,都要終止 # async.revoke(terminate=False) # 若是任務尚未開始執行呢,那麼就能夠終止。 if async.successful(): result = async.get() return "執行完成,結果是:%s" %(result,) # async.forget() # 將結果刪除 elif async.failed(): return '執行失敗' elif async.status == 'PENDING': return '任務等待中被執行' elif async.status == 'RETRY': return '任務異常後正在重試' elif async.status == 'STARTED': return '任務已經開始被執行' except Exception as e: return "執行異常" @app.route('/status') def revoke(): #終止功能 id = request.args.get('id') # 根據id查看任務狀態 async = AsyncResult(id=id, app=cel) async.revoke(terminate=True) # 不管如今是何時,都要終止 return '已經終止' if __name__ == '__main__': app.run()