知识星球: 迷途小书童;个人微信:xituxiaoshutong100

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

Flask Web 迷途小书童 0评论

软硬件环境

  • 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/modules/

参考资料

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址