首页 > 解决方案 > 在 Flask 应用程序中线程化外部脚本

问题描述

我有一个使用外部脚本执行某些操作的 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()

但是,当此脚本运行(从表单)时,该过程将挂起,我将在网页上获得一个连续的加载周期。
是否有另一种在应用程序中使用多线程的方法?

标签: pythonpython-3.xmultithreadingflaskpython-multithreading

解决方案


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

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

执行单元称为任务,使用多处理、Eventlet 或 gevent 在单个或多个工作服务器上并发执行。任务可以异步执行(在后台)或同步执行(等到准备好)。

这里有一些很好的资源,你可以用来开始


推荐阅读