千家信息网

Python中怎么使用Flask实现进度条

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,本篇内容主要讲解"Python中怎么使用Flask实现进度条",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python中怎么使用Flask实现进度条"吧!
千家信息网最后更新 2024年11月20日Python中怎么使用Flask实现进度条

本篇内容主要讲解"Python中怎么使用Flask实现进度条",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python中怎么使用Flask实现进度条"吧!

    使用Flask实现进度条

    问题描述

    Python异步处理,新起一个进程返回处理进度

    解决方案

    使用 tqdm 和 multiprocessing.Pool

    安装

    pip install tqdm

    代码

    import timeimport threadingfrom multiprocessing import Poolfrom tqdm import tqdmdef do_work(x):    time.sleep(x)    return xdef 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)

    效果

    Flask

    安装

    pip install flask

    main.py

    import timefrom multiprocessing import Poolfrom tqdm import tqdmfrom flask import Flask, make_response, jsonifyapp = Flask(__name__)def do_work(x):    time.sleep(x)    return xtotal = 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=mainflask run

    接口列表

    • 执行任务:http://127.0.0.1:5000/run/

    • 查看进度:http://127.0.0.1:5000/progress/

    test.html

            进度条            

    0.00%

    效果

    Flask使用简单异步任务

    在Flask中使用简单异步任务最简洁优雅的原生实现:

    from flask import Flaskfrom time import sleepfrom concurrent.futures import ThreadPoolExecutor# DOCS https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutorexecutor = 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实现进度条"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    0