您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
本篇内容主要讲解“Python中怎么使用Flask实现进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中怎么使用Flask实现进度条”吧!
Python异步处理,新起一个进程返回处理进度
使用 tqdm 和 multiprocessing.Pool
安装
pip install tqdm
代码
import time
import threading
from multiprocessing import Pool
from tqdm import tqdm
def do_work(x):
time.sleep(x)
return x
def progress():
time.sleep(3) # 3秒后查进度
print(f'任务有: {pbar.total} 已完成:{pbar.n}')
tasks = range(10)
pbar = tqdm(total=len(tasks))
if __name__ == '__main__':
thread = threading.Thread(target=progress)
thread.start()
results = []
with Pool(processes=5) as pool:
for result in pool.imap_unordered(do_work, tasks):
results.append(result)
pbar.update(1)
print(results)效果

安装
pip install flask
main.py
import time
from multiprocessing import Pool
from tqdm import tqdm
from flask import Flask, make_response, jsonify
app = Flask(__name__)
def do_work(x):
time.sleep(x)
return x
total = 5 # 总任务数
tasks = range(total)
pbar = tqdm(total=len(tasks))
@app.route('/run/')
def run():
"""执行任务"""
results = []
with Pool(processes=2) as pool:
for _result in pool.imap_unordered(do_work, tasks):
results.append(_result)
if pbar.n >= total:
pbar.n = 0 # 重置
pbar.update(1)
response = make_response(jsonify(dict(results=results)))
response.headers.add('Access-Control-Allow-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', '*')
response.headers.add('Access-Control-Allow-Methods', '*')
return response
@app.route('/progress/')
def progress():
"""查看进度"""
response = make_response(jsonify(dict(n=pbar.n, total=pbar.total)))
response.headers.add('Access-Control-Allow-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', '*')
response.headers.add('Access-Control-Allow-Methods', '*')
return response启动(以 Windows 为例)
set FLASK_APP=main flask run
接口列表
执行任务:http://127.0.0.1:5000/run/
查看进度:http://127.0.0.1:5000/progress/
test.html
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>进度条</title> <script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet"> </head> <body> <button id="run">执行任务</button> <br><br> <div class="progress"> <div class="progress-bar" role="progressbar" aria-valuenow="1" aria-valuemin="0" aria-valuemax="100" >0.00% </div> </div> </body> <script> function set_progress_rate(n, total) { //设置进度 var rate = (n / total * 100).toFixed(2); if (n > 0) { $(".progress-bar").attr("aria-valuenow", n); $(".progress-bar").attr("aria-valuemax", total); $(".progress-bar").text(rate + "%"); $(".progress-bar").css("width", rate + "%"); } } $("#run").click(function () { //执行任务 $.ajax({ url: "http://127.0.0.1:5000/run/", type: "GET", success: function (response) { set_progress_rate(100, 100); console.log('执行完成,结果为:' + response['results']); } }); }); setInterval(function () { //每1秒请求一次进度 $.ajax({ url: "http://127.0.0.1:5000/progress/", type: "GET", success: function (response) { console.log(response); var n = response["n"]; var total = response["total"]; set_progress_rate(n, total); } }); }, 1000); </script> </html>
效果

在Flask中使用简单异步任务最简洁优雅的原生实现:
from flask import Flask
from time import sleep
from concurrent.futures import ThreadPoolExecutor
# DOCS https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor
executor = ThreadPoolExecutor(2)
app = Flask(__name__)
@app.route('/jobs')
def run_jobs():
executor.submit(some_long_task1)
executor.submit(some_long_task2, 'hello', 123)
return 'Two jobs was launched in background!'
def some_long_task1():
print("Task #1 started!")
sleep(10)
print("Task #1 is done!")
def some_long_task2(arg1, arg2):
print("Task #2 started with args: %s %s!" % (arg1, arg2))
sleep(5)
print("Task #2 is done!")
if __name__ == '__main__':
app.run()到此,相信大家对“Python中怎么使用Flask实现进度条”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。