Celery或Redis Queue创建后台任务太麻烦,本文教你用Flask API创建Python后台任务。
微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩
后台任务无需等待资源就可以执行任务,它对于后端开发十分重要。
在Python中,有若干解决方案可以实现后台任务,比如Celery或Redis Queue,都是实现任务队列系统的好方法。但使用这二者都比较麻烦。设想这样一个场景,我们用Flask建立一个API,实现从一个终端调用后台任务,并用另一个终端停止后台任务。这样就简单多了!
代码解决方案
使用Flask建立了一个简单的API,有两个主要的方法,一个用于启动后台任务,另一个用于停止。
为了管理任务的生命周期,我们使用Event Objects
,这是一种简单的线程间通信机制。
如下所示是所需导入的库、线程事件声明和后台任务方法:
from time import sleep
from flask import Flask
from flask_cors import CORS
import threading
thread_event = threading.Event()
def backgroundTask():
while thread_event.is_set():
print('Background task running!')
sleep(5)
这里的关键是is_set()
方法,它将返回内部线程事件标志的值:true
或false
。
首先,使用set()
方法把标志设置为true
,它将启动一个线程,并连续运行backgroundTask
方法。
@app.route("/start", methods=["POST"])
def startBackgroundTask():
try:
thread_event.set()
thread = threading.Thread(target=backgroundTask)
thread.start()
return "Background task started!"
except Exception as error:
return str(error)
如果要停止任务,调用clear()
方法将标志设置为false
,以停止正在运行的线程。
@app.route("/stop", methods=["POST"])
def stopBackgroundTask():
try:
thread_event.clear()
return "Background task stopped!"
except Exception as error:
return str(error)
结语
以上就是后台任务的代码解决方案,这比用任务队列实现后台任务要简单得多。可以使用上述代码来建立具有一个或多个后台任务的API!
推荐书单
《Python从入门到精通(第2版)》
《Python从入门到精通(第2版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分23章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表和元组、字典和集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、异常处理及程序调试、文件及目录操作、操作数据库、GUI界面编程、Pygame游戏编程、网络爬虫开发、使用进程和线程、网络编程、Web编程、Flask框架、e起去旅行网站、AI图像识别工具等内容。所有知识都结合具体实例进行介绍,涉及的程序代码都给出了详细的注释,读者可轻松领会Python程序开发的精髓,快速提升开发技能。除此之外,该书还附配了243集高清教学微视频及PPT电子教案。
精彩回顾
《使用ChatGPT API创建Python文档,竟然如此简单》
《餐厅数据一网打尽,用Python采集并分析TripAdvisor》
微信搜索关注《Python学研大本营》,加入读者群
访问【IT今日热榜】,发现每日技术热点