欢迎访问本站,希望站内信息可以帮助到您!感兴趣的,可以加入我的知识星球,一起学习,一起进步!

Flask教程(二十三)简单异步任务

Flask Web 迷途小书童 3评论

软硬件环境

  • windows 10 64bit
  • anaconda3 with python 3.7
  • flask 1.1.2

视频看这里

此处是youtube的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

前言

Python 3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor(线程池)和ProcessPoolExecutor(进程池)两个类。使用submit方法来提交线程(或进程)需要执行的任务到线程(进程)池中,并返回该任务的句柄,submit不是阻塞的,而是立即返回。通过任务句柄的done()方法来判断该任务是否结束,通过result()方法可以获取任务的返回值。

结合concurrent.futures模块,可以在flask应用中实现简单异步任务。

代码实现

直接来看代码吧

from flask import Flask
import time
from concurrent.futures import ThreadPoolExecutor

executor = ThreadPoolExecutor(2)

app = Flask(__name__)

@app.route('/tasks')
def run_background_tasks():
    # 提交2个任务,一个带参、一个不带参
    executor.submit(background_task1)
    executor.submit(background_task2, 'hello', 'future')
    return 'tasks started in background!'

def background_task1():
    print("background_task1 started!")
    time.sleep(10)
    print("background_task1 done!")

def background_task2(arg1, arg2):
    print(f"background_task2 started with args: {arg1} {arg2}!")
    time.sleep(5)
    print("background_task2 done!")

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

启动flask服务后,访问http://127.0.0.1:5000/tasks,观察终端的打印输出

flask_future

源码下载

https://github.com/xugaoxiang/FlaskTutorial

Flask教程专题

更多Flask教程,请移步

https://xugaoxiang.com/category/python/flask/

参考资料

喜欢 (1)

您必须 登录 才能发表评论!

(3)个小伙伴在吐槽
  1. 感谢博主。简单粗暴高效解决了我请求任务中一个耗时问题
    匿名2021-09-14 11:07
  2. 请问,为什么启动程序之后没有请求,但是先输出了两条start 的日志
    匿名2021-09-10 11:49