如何在后台运行功能而不阻塞主线程和服务Flask应用

时间:2020-06-17 17:39:44

标签: python flask python-asyncio

我已经阅读了有关异步的多个SO答案,以了解如何实现此目的。但是,我发现的答案不适用于我遇到的问题。

我有一个运行后台功能时要提供的Flask应用程序。我有以下代码:

import asyncio
import time
from flask import Flask

def background_task():
    while True:
        print('hej')
        time.sleep(1)

app = Flask(__name__)

@app.route('/test')
def hello_world():
    return 'Hello, world'

asyncio.run(background_task())

app.run()

print('running')

我希望background_task在提供应用程序时继续运行。但是当前asyncio.run阻止了主线程。如何使background_task作为协程运行?

1 个答案:

答案 0 :(得分:0)

尝试使用threading模块,我发现它很有用,下面是一个示例:

import threading
import asyncio
import time
from flask import Flask

def background_task():
    while True:
        print('hej')
        time.sleep(1)

app = Flask(__name__)

@app.route('/test')
def hello_world():
    return 'Hello, world'

#We start a thread instead of using asyncio...
t=threading.Thread(target=background_task)
t.start()

app.run()

print('running')

这是一个教程:https://realpython.com/intro-to-python-threading/

希望对您有帮助。