python - 在 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()
但是,当此脚本运行(从表单)时,该过程将挂起,我将在网页上获得一个连续的加载周期。
是否有另一种在应用程序中使用多线程的方法?
解决方案
在 Flask 应用程序中自己实现线程对我来说总是以某种灾难告终。您可能想要使用分布式任务队列,例如Celery。即使您可能很想自己剥离线程以更快地完成它,但您将开始面临各种问题,最终会浪费大量时间(恕我直言)。
Celery 是一个基于分布式消息传递的异步任务队列/作业队列。它专注于实时操作,但也支持调度。
执行单元称为任务,使用多处理、Eventlet 或 gevent 在单个或多个工作服务器上并发执行。任务可以异步执行(在后台)或同步执行(等到准备好)。
这里有一些很好的资源,你可以用来开始
推荐阅读
- c# - 如何将xml对象映射到列表中
在 C# 中? - javascript - 搜索时不同的选择下拉菜单应具有相同的下拉选项值
- c# - 当用户在 textbox1 和 textbox2 中键入无效字符时,会出现“无效字符消息”并且 textbox1 的文本变为红色
- arrays - 打印二维数组:警告:数组初始值设定项中的多余元素
- linux - 无法完成与 2404:6800:4005:807::200e:80 的 SOCKS5 连接
- python - 如果你做太多'layers.MaxPooling2D()'会发生什么
- azure - 如何在 power shell 中使用 RM 模块获取 Azure App 配置访问密钥
- sails.js - 如何在 Sails.js 中将我们自己的自定义 JSON 消息添加到 Blueprint API?
- python - 结合CNN和双向LSTM
- r - Importing a csv file using fread loses factor order