一个比较简单的功能问题请教
现在实现的功能是这样的:
页面指定一个项目以及调节一个版本号
提交完之后服务端开始处理
@qq.route('/updateqq',methods=['GET','POST'])
def updateqq():
versionform = VersionForm()
rsyncwork = rsyncPro()
if versionform.validate_on_submit():
session['proId'] = request.form.get('selectid')
session['versionNum'] = versionform.version.data
print session.get('proId')
print session.get('versionNum')
#获取项目各个信息
project_name = proDic.get('%s' %session.get('proId'))['pro_name']
project_local_dir = proDic.get('%s' %session.get('proId'))['pro_dir']
project_online_dir = proDic.get('%s' %session.get('proId'))['ol_dir']
project_ip = proDic.get('%s' %session.get('proId'))['pro_ip']
project_cmd = proDic.get('%s' %session.get('proId'))['pro_up']
print project_name,project_local_dir,project_online_dir,project_ip,project_cmd
#执行svn操作
rsyncwork.get_version(project_local_dir)
rsyncwork.online_laste(project_online_dir,project_name)
up_version = int(session.get('versionNum'))
rsyncwork.get_version(project_local_dir)
return redirect(url_for('qq.updateqq'))
return render_template('qq/updateqq.html',
prodict = pronameDict(),
versionform = versionform)
服务最终处理一些update,rsync,commit等一些操作内容,由于每次更新的内容不一定,执行这个的时间也不一定,当服务端执行这些时候,页面就会处于一直在加载的状态,所以我想把服务端处理的这些单独剥离出来,最终的实现功能就是,当页面提交完之后,前端就算处理完了,返回到原始的表单页面,服务端自己独立出来这些内容,而不是前端要等服务端处理完才跳转回到原来的页面。
这种的是要怎么的一种处理思路的?
這個靠 flask 是不行的。 flask 的模型是:請求-回應。而你的這個需求是遊離在這個過程外的。
簡單來說,你需要一個系統來幫你處理非同步的任務,考慮到你用 Python,我推薦 celery。
輕鬆點的方案:
前端提交資訊
view 層保存信息,保存到數據庫或什麼地方,包括 誰,對誰,要做什麼,並設置初始狀態為未完成
跑個後台腳本,死循環,不斷從上面保存了的地方讀取 未完成 的任務,執行具體任務,標記為已完成。
你指的是flask的非同步訊息回應吧,需要使用一個訊息佇列,訊息佇列的作用是只快取使用者目前的請求但並不真正處理,將訊息派生給對應的工作者去處理,你可以看看Flask-Celery,此外也常用Flask-RQ