我有一个 Flask 应用程序,它使用外部脚本来执行某些操作。在其中一个脚本中,我使用
threading
来运行线程。
我使用以下代码进行实际线程处理:
for a_device in get_devices:
my_thread = threading.Thread(target=DMCA.do_connect, args=(self, a_device, cmd))
my_thread.start()
main_thread = threading.currentThread()
for some_thread in threading.enumerate():
if some_thread != main_thread:
some_thread.join()
但是,当这个脚本(从表单)运行时,该进程将挂起,我将在网页上获得连续的加载周期。
还有其他方法可以在应用程序中使用多线程吗?
在 Flask 应用程序中自己实现线程对我来说总是以某种灾难告终。您可能想使用分布式任务队列,例如 Celery。尽管您可能很想自己分拆线程以更快地完成它,但在此过程中您将开始面临各种问题,最终会浪费大量时间(恕我直言)。
Celery是一个基于分布式的异步任务队列/作业队列 消息传递。它专注于实时操作,但支持 也安排一下。
执行单元,称为任务,在一个 使用多处理、Eventlet 或的单个或多个工作服务器 事件。任务可以异步执行(在后台)或 同步(等待准备好)。
这里有一些您可以用来入门的好资源
如果您想执行后台任务,与 Flask 应用程序分开,下面的示例方法将会很有帮助。
import threading
from flask import Flask
app = Flask(__name__)
def background_task():
print("Background thread started")
# start on background
background_task_thread = threading.Thread(target=background_task)
background_task_thread.start()
@app.route('/')
def index():
return "welcome";
if __name__ == '__main__':
app.run()