最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python異步處理返回進度——使用Flask實現(xiàn)進度條

 更新時間:2022年05月10日 16:49:47   作者:XerCis  
這篇文章主要介紹了Python異步處理返回進度——使用Flask實現(xiàn)進度條,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用Flask實現(xiàn)進度條

問題描述

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'任務(wù)有: {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 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  # 總?cè)蝿?wù)數(shù)
tasks = range(total)
pbar = tqdm(total=len(tasks))
@app.route('/run/')
def run():
    """執(zhí)行任務(wù)"""
    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

接口列表

  • 執(zhí)行任務(wù):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  rel="external nofollow"  rel="stylesheet">
</head>
<body>
<button id="run">執(zhí)行任務(wù)</button>
<br><br>
<div class="progress">
    <div class="progress-bar" role="progressbar" aria-valuenow="1" aria-valuemin="0" aria-valuemax="100"
         style="width: 10%">0.00%
    </div>
</div>
</body>
<script>
    function set_progress_rate(n, total) {
        //設(shè)置進度
        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 () {
        //執(zhí)行任務(wù)
        $.ajax({
            url: "http://127.0.0.1:5000/run/",
            type: "GET",
            success: function (response) {
                set_progress_rate(100, 100);
                console.log('執(zhí)行完成,結(jié)果為:' + 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使用簡單異步任務(wù)

在Flask中使用簡單異步任務(wù)最簡潔優(yōu)雅的原生實現(xiàn):

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()

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Anaconda安裝之后Spyder打不開解決辦法(親測有效!)

    Anaconda安裝之后Spyder打不開解決辦法(親測有效!)

    這篇文章主要給大家介紹了關(guān)于Anaconda安裝之后Spyder打不開解決辦法,文中將解決的過程介紹的非常詳細,親測有效,對同樣遇到這個問題的朋友具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-04-04
  • python Tensor和Array對比分析

    python Tensor和Array對比分析

    今天小編就為大家分享一篇python Tensor和Array對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python 基于wx實現(xiàn)音樂播放

    python 基于wx實現(xiàn)音樂播放

    這篇文章主要介紹了python 基于wx實現(xiàn)音樂播放的示例代碼,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • Python代碼中引用已經(jīng)寫好的模塊、方法的兩種方式

    Python代碼中引用已經(jīng)寫好的模塊、方法的兩種方式

    這篇文章主要介紹了Python代碼中引用已經(jīng)寫好的模塊、方法,下面就介紹兩種方式,可以簡潔明了地調(diào)用自己在其他模塊寫的代碼,需要的朋友可以參考下
    2022-07-07
  • 如何在python中處理配置文件代碼實例

    如何在python中處理配置文件代碼實例

    這篇文章主要介紹了如何在python中處理配置文件代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Django如何將URL映射到視圖

    Django如何將URL映射到視圖

    這篇文章主要介紹了Django如何將URL映射到視圖,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python中使用不同編碼讀寫txt文件詳解

    Python中使用不同編碼讀寫txt文件詳解

    這篇文章主要介紹了Python中使用不同編碼讀寫txt文件詳解,本文給出不同編碼下的讀寫文件代碼方法,需要的朋友可以參考下
    2015-05-05
  • Python 列表排序詳解

    Python 列表排序詳解

    這篇文章主要介紹了Python中對列表排序?qū)嵗?本文給出了9個List的排序?qū)嵗?需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • 如何使用?profile?進行python代碼性能分析

    如何使用?profile?進行python代碼性能分析

    對代碼優(yōu)化的前提是需要了解性能瓶頸在什么地方,程序運行的主要時間是消耗在哪里,對于比較復(fù)雜的代碼可以借助一些工具來定位,python?內(nèi)置了豐富的性能分析工具,本文介紹如何使用profile進行python代碼性能分析,感興趣的朋友一起看看吧
    2024-12-12
  • Python中torch.norm()用法解析

    Python中torch.norm()用法解析

    本文主要介紹了Python中torch.norm()用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評論

庄浪县| 辽阳县| 洪江市| 化州市| 中宁县| 墨竹工卡县| 溆浦县| 罗田县| 伊春市| 正蓝旗| 东乡族自治县| 辽源市| 墨玉县| 哈巴河县| 鄯善县| 金乡县| 蚌埠市| 蒲城县| 淮北市| 楚雄市| 汪清县| 石阡县| 呼伦贝尔市| 库伦旗| 洱源县| 鄂伦春自治旗| 宁武县| 郸城县| 敖汉旗| 莱州市| 嘉义市| 乌拉特中旗| 景泰县| 冷水江市| 华亭县| 张家口市| 佛冈县| 澳门| 白城市| 康马县| 伊宁县|