提问人:RAM 提问时间:1/22/2020 更新时间:11/21/2022 访问量:32421
如何在python中运行后台任务
How to run background tasks in python
问:
我正在使用 Flask 开发一个小型 Web 服务,它需要运行后台任务,最好是从任务队列运行。然而,在谷歌搜索主题之后,唯一的结果基本上是 Celery 和 Redis 队列,它们显然需要单独的排队服务,因此这些选项过于繁重和复杂而无法部署。由于我所寻找的只是一个简单的后台任务队列,它使任务能够在单独的线程/进程上排队和执行,有谁知道 Python 中是否有这样的东西?
答:
5赞
user3919706
1/22/2020
#1
asyncio 库可能就是你要找的
import asyncio
async def main():
print('Hello ...')
await asyncio.sleep(1)
print('... World!')
# Python 3.7+
asyncio.run(main())
10赞
Farhan Syedain
2/3/2021
#2
import threading
import time
class BackgroundTasks(threading.Thread):
def run(self,*args,**kwargs):
while True:
print('Hello')
time.sleep(1)
t = BackgroundTasks()
t.start()
在 while 语句之后,您可以将要运行的代码放在后台。也许删除一些模型,发送电子邮件或其他什么。
评论
0赞
CalebK
9/18/2023
当我退出程序时,后台任务也会退出。有没有办法防止这种情况发生?
4赞
Prakash Dahal
11/21/2022
#3
如果您使用的是 FastAPI,则已经有 BackgroundTasks 的实现
收到请求后,无需实现线程和队列即可执行后台任务。
代码实现:
from fastapi import BackgroundTasks, FastAPI
app = FastAPI()
# function that will run in background after sending the response
def write_notification(email: str, message=""):
with open("log.txt", mode="w") as email_file:
content = f"notification for {email}: {message}"
email_file.write(content)
@app.post("/send-notification/{email}")
async def send_notification(email: str, background_tasks: BackgroundTasks):
background_tasks.add_task(write_notification, email, message="some notification")
return {"message": "Tasks are happening in background"}
评论