在 Flask 应用程序中线程化外部脚本

问题描述 投票:0回答:2

我有一个 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()

但是,当这个脚本(从表单)运行时,该进程将挂起,我将在网页上获得连续的加载周期。
还有其他方法可以在应用程序中使用多线程吗?

python python-3.x multithreading flask python-multithreading
2个回答
0
投票

在 Flask 应用程序中自己实现线程对我来说总是以某种灾难告终。您可能想使用分布式任务队列,例如 Celery。尽管您可能很想自己分拆线程以更快地完成它,但在此过程中您将开始面临各种问题,最终会浪费大量时间(恕我直言)。

Celery是一个基于分布式的异步任务队列/作业队列 消息传递。它专注于实时操作,但支持 也安排一下。

执行单元,称为任务,在一个 使用多处理、Eventlet 或的单个或多个工作服务器 事件。任务可以异步执行(在后台)或 同步(等待准备好)。

这里有一些您可以用来入门的好资源


0
投票

如果您想执行后台任务,与 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()
© www.soinside.com 2019 - 2024. All rights reserved.