Python - 在 Flask 中将查询结果从服务器返回到客户端

2024-03-21

  • 我拥有的

    我在 Flask 中有一个客户端/服务器。客户端将 JSON 格式的查询发送到服务器,服务器创建一个 JSON 文件。还有另一个工具可以接受此查询,在数据库上执行它并将结果写入 results.txt 文件。服务器定期检查“结果”目录中的 .txt 文件,如果发现新文件,则会提取结果。对于定期检查部分,我使用了 APS。

  • 我想做的事现在我想将从服务器从 .txt 文件中提取的数据(queryResult)发送回客户端。

这就是我到目前为止所做的。

  • 服务器代码:
app = Flask(__name__)
api = Api(app)

# Variable to store the result file count in the Tool directory
fileCount = 0

# Variable to store the query result generated by the Tool
queryResult = 0    
    
# Method to read .txt files generated by the Tool
def readFile():
    global fileCount
    global queryResult
    # Path where .txt files are created by the Tool
    path = "<path>"
    tempFileCount = len(fnmatch.filter(os.listdir(path), '*.txt'))
    if (fileCount != tempFileCount):
        fileCount = tempFileCount
        list_of_files = glob.iglob(path + '*.txt')
        latest_file = max(list_of_files, key=os.path.getctime)
        print("\nLast modified file: " + latest_file)
        with open(latest_file, "r") as myfile:
            queryResult = myfile.readlines()
            print(queryResult) # I would like to return this queryResult to the client
            
scheduler = BackgroundScheduler()
scheduler.add_job(func=readFile, trigger="interval", seconds=10)
scheduler.start()   

# Shut down the scheduler when exiting the app
atexit.register(lambda: scheduler.shutdown())   
   
# Method to write url parameters in JSON to a file
def write_file(response):
    time_stamp = str(time.strftime("%Y-%m-%d_%H-%M-%S"))  
    with open('data' + time_stamp + '.json', 'w') as outfile:
        json.dump(response, outfile)
    print("JSON File created!")
   

class GetParams(Resource):
    def get(self):
        response = json.loads(list(dict(request.args).keys())[0])  
        write_file(response)  
           
api.add_resource(GetParams, '/data')  # Route for GetJSON()

if __name__ == '__main__':
    app.run(port='5890', threaded=True)
  • 客户端代码
data = {
    'query': 'SELECT * FROM table_name'
}

url = 'http://127.0.0.1:5890/data'

session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)  
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

resp = session.get(url, params=json.dumps(data))
print(resp)

谁能帮助我如何将此查询结果发送回客户?

编辑:我希望服务器每次在工具目录中遇到新文件时将 queryResult 发送回客户端,即每次找到新文件时,它都会提取结果(当前正在执行此操作)并发送它返回给客户端。


你想做的事情叫做Web Worker Architecture.

传递实时摘要queryResult从后台作业到客户端应用程序,您可以使用消息队列(推荐 Kafka,RabbitMQ 也可以)和 Web-Socket 的组合。当客户端发送请求到/data端点,您应该返回一些唯一的令牌(如果您的用户是匿名的,则返回 UUID,如果经过身份验证,则返回用户 ID)。您应该将相同的标记添加到生成的文件的名称中。当后台工作程序处理完文件后,它使用令牌(来自文件名)创建 Kafka 或 RabbitMQ 主题,例如topic_for_user_id_1337 or topic_for_uuid_jqwfoj-123qwr,并发布queryResult作为一条消息。

同时,你的客户端应该建立一个 Web 套接字连接(Flask 对于​​ Web 套接字来说非常糟糕,但是很少有好的库可以做到这一点,比如 socketio),并将令牌通过它传递到你的后端,这样就可以了我们将创建一个消息队列订阅者,使用令牌名称订阅主题,以便当后台作业完成时,Web 后端将接收消息并通过 Web 套接字将其传递给用户。

附:如果听起来过于复杂,您可以避免使用 MQ 和 WS,而将queryResult进入数据库并创建一个端点来检查它是否存在于数据库中。如果不是,你会返回类似的东西not ready yet如果准备就绪,客户端会在几秒钟内重试 - 您返回queryResult来自数据库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python - 在 Flask 中将查询结果从服务器返回到客户端 的相关文章

  • Pyqt-如何因另一个组合框数据而更改组合框数据?

    我有一个表 有 4 列 这 4 列中的两列是关于功能的 一个是特征 另一个是子特征 在每一列中 所有单元格都有组合框 我可以在这些单元格中打开txt 我想 当我选择电影院作为功能时 我只想看到子功能组合框中的电影名称 而不是我的 数据 中的
  • Pandas dataframe:每批行的操作

    我有一个熊猫数据框df我想计算每批行的一些统计信息 例如 假设我有一个batch size 200000 对于每批batch sizerows 我想要一列的唯一值的数量ID我的数据框 我怎样才能做这样的事情呢 这是我想要的一个例子 prin
  • 如何在VIM中设置文件的正确路径?

    每当我击中 pwd在 vim 中命令总是返回路径C Windows system32 即使我在桌面上的 Python 文件中 所以每当我跑步时 python 命令返回 python can t open file Users myname
  • 将 JSON 反序列化为表

    我需要根据通过 API 接收的数据填充 ABAP 中的表 我正在使用以下 ABAP 函数从 json 填充现有的 ABAP 表 JSON 是正确的 表中包含相应的表 ui2 cl json gt deserialize EXPORTING
  • 更改 x 轴比例

    我使用 Matlab 创建了这个图 使用 matplotlib x 轴绘制大数字 例如 100000 200000 300000 我想要 1 2 3 和 10 5 之类的值来指示它实际上是 100000 200000 300000 有没有一
  • 编辑 Jupyter Notebook 时 VS Code 中缺少“在选择中查找”

    使用 Jupyter Notebook 时 VSCode 中缺少 在选择中查找 按钮 它会减慢开发速度 所以我想请问有人知道如何激活它吗 第一张图显示了在 python 文件中的搜索 替换 第二张图显示了笔记本电脑中缺少的按钮 Python
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim
  • Python Django-如何从输入文件标签读取文件?

    我不想将文件保存在我的服务器上 我只想在下一页中读取并打印该文件 现在我有这个 index html
  • Python Pandas:如何对组中的所有项目进行分组并为其分配 id?

    我有 df domain orgid csyunshu com 108299 dshu com 108299 bbbdshu com 108299 cwakwakmrg com 121303 ckonkatsunet com 121303
  • 使用嵌套的 hashmap 参数发送 volley 请求

    我正在使用 android volley 框架向我的服务器发送 jsonobject 请求 get 请求工作正常 现在我想发送一个带有请求参数的 post 请求 该请求参数是嵌套的 hashmap 我重写 getparams 方法 但它期望
  • JSON-LD 缺少“}”或对象成员名称。错误

    我喜欢将 json ld 添加到我的网站 然后我想将它添加到我的开发网站来测试它 我收到错误消息 指出缺少 或对象成员名称 这是什么错误 我已正确关闭括号 如何修复它
  • Python:我不明白 sum() 的完整用法

    当然 我明白你使用 sum 与几个数字 然后它总结所有 但我正在查看它的文档 我发现了这一点 sum iterable start 第二个参数 start 的作用是什么 这太尴尬了 但我似乎无法通过谷歌找到任何示例 并且对于尝试学习该语言的
  • Werkzeug 中的线程和本地代理。用法

    首先 我想确保我正确理解了功能的分配 分配本地代理功能以通过线程内的模块 包 共享变量 对象 我对吗 其次 用法对我来说仍然不清楚 也许是因为我误解了作业 我用烧瓶 如果我有两个 或更多 模块 A B 我想将对象C从模块A导入到模块B 但我
  • 使用 pybtex 将 bibtex 转换为格式化的 HTML 参考书目,例如哈佛风格

    我正在使用 Django 并将 bibtex 存储在我的模型中 并且希望能够以格式化 HTML 字符串的形式向我的视图传递引用 使其看起来像哈佛引用样式 使用中描述的方法Pybtex 无法识别 bibtex 条目 https stackov
  • Django - 提交具有同一字段多个输入的表单

    预警 我对 Django 以及一般的 Web 开发 非常陌生 我使用 Django 托管一个基于 Web 的 UI 该 UI 将从简短的调查中获取用户输入 通过我用 Python 开发的一些分析来提供输入 然后在 UI 中呈现这些分析的可视
  • 使用 NLP 进行地址分割

    我目前正在开发一个项目 该项目应识别地址的每个部分 例如来自 str Jack London 121 Corvallis ARAD ap 1603 973130 输出应如下所示 street name Jack London no 121
  • Flask 应用程序的测试覆盖率不起作用

    您好 想在终端的 Flask 应用程序中测试 删除路由 我可以看到测试已经过去 它说 test user delete test app LayoutTestCase ok 但是当我打开封面时 它仍然是红色的 这意味着没有覆盖它 请有人向我
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • [cocos2d-x]当我尝试在 Windows 10 中运行“python android-build.py -p 19 cpp-tests”时出现错误

    当我尝试运行命令时python android build p cpp tests 我收到如图所示的错误 在此之前 我收到了另一条关于 Android SDK Tools 版本兼容性的错误消息 所以 我只是将 sdk 版本从 26 0 0
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐

  • 如何了解我的 Android 应用在用户设备上消耗了多少电池?

    我正在编写一个应用程序来评估 Android 上蓝牙 P2P 网络的可行性 我注意到 在 Galaxy Nexus 上 它使用的电池很少 而在 Nexus S 上 它消耗电池的速度非常快 这是由于蓝牙导致CPU负载过高直接导致的 现在 我想
  • Camel中如何动态添加和启动路由?

    我正在尝试从 Camel 的路线中删除一些样板 例如 让我们考虑两条相似的路线 并且可以生成它们的大部分内部内容 我创建了一个组件 模板 它创建了TemplateEndpoint 并修改了 XML 配置以使用模板组件 自定义方法Templa
  • 适用于 Android 的自定义旋转对话框

    如何制作自定义主题 Android Spinner 对话框 该博客有一个示例 可能可以解决您的问题 http www mokasocial com 2011 03 easily create a default custom styled
  • SKLearn Naive Bayes:在 tfidf 矢量化后添加特征

    因此 我的任务是训练一个电话记录模型 以下代码执行此操作 一些背景信息 x 是一个字符串列表 每个第 i 个元素是一个完整的转录本 y 是布尔值列表 表示调用的结果是正还是负 以下代码有效 但这是我的问题 我想将通话时长作为一项训练功能 我
  • 带 ProgressBar 的 Endless RecyclerView 用于分页

    我正在使用一个RecyclerView http developer android com reference android support v7 widget RecyclerView html并以十个为一组从 API 获取对象 对于
  • PHP 未在正确的位置回显

    我在我的 WordPress 网站上运行一些 PHP 代码 当 PHP 运行以回显某些信息时 它没有在正确的位置回显它 代码的缩写版本是 div class description cms div h2 Search By Category
  • 使用 Ruby On Rails 进行事务操作

    我在控制器内有一个复杂的操作 可以对数据库执行多个更新查询 我怎样才能做出这个动作行为类似于交易没有任何结构重构 MyModel transaction do begin model update stuff sub model updat
  • 如何让控件重绘 Windows 窗体?

    我不太确定 重绘 是我正在寻找的 我是手工设计 Windows 窗体的新手 我创建了一个类 它将使用 TableLayoutPanel 作为传递的变量 并在该表格布局面板中进行自己的设计 以便可以重用该控件并调整其参数以适应其包含的数据 我
  • 用于本机 C++ 的 C++/CLI 包装器,可在 C# 中用作参考

    标题解释了 我有本机 C dll 正在为其编写 C CLI 包装器 这些包装器将依次导入到 C 中作为参考 问题是在 C 中我看不到包装器中的类 从 DLL 导入 我应该使用哪些关键字以及如何重新声明我的本机 C 对象以在 C 中可见 好的
  • 角度从 1 开始 ngFor 索引

    ngFor索引是否可以从1而不是0开始 let data of datas let i index 1 没用 ngFor let item of items slice 1 let i index 切片管 https angular io
  • 在 Visual Studio 2015 中使用和导出 std::string 和 std::vector

    使用 VS2013 和合适的导出宏 我可以使用此示例代码导出 std string 和 std vector ifdef MSC VER Explicit template exports c EXPORT TEMPLATE templat
  • Qt 安装程序框架 - 在开始菜单中为所有用户创建快捷方式

    使用安装程序框架 我想为我的应用程序创建一个安装程序 该应用程序由管理员安装在 PC 上 然后该应用程序由不同的用户使用 在安装程序中 我创建从可执行文件到开始菜单的快捷方式 这是在installscript js通过命令 componen
  • Angularjs - 元素上的多个指令,其中一个是隔离范围

    想知道是否有人可以解释当前的行为 我有一个具有隔离范围的指令 称之为 dirA 然后我在上面添加了另一个指令 dirB 期望第二个指令获取isolate指令创建的每个范围 dirB 获取控制器范围 为什么它不能获得 dirA 为该元素创建的
  • Rails - 使用父级的范围父级验证嵌套属性的唯一性

    我在 Rails 中对具有父级的嵌套属性进行范围唯一性验证时遇到问题 背景 我有一个包含 3 个模型的 Rails 4 应用程序 app models account rb class Account lt ActiveRecord Bas
  • 在 C# 中实现这 3 个类的最佳方式:Vector、Direction(单位向量)、Point

    所有点都是向量 所有向量都是点 所有方向都是向量 并非所有向量都是方向 这不应该意味着不允许双向转换 我希望最好将运算符全部覆盖一次 因为它们都是完全相同的 在 C 中 我可以定义 class Vector float x y z 并执行
  • Couchbase 几秒后超时

    我有大约 100 200k 个小文档 其中包含 base64 编码的图像 非常小的图像 我正在尝试将所有这些文档插入 Couchbase 但在前 28k 个文档 总大小约为 185 Mb 后我不断收到此错误 Error Client Sid
  • npm 包上的“at”(@) 前缀是什么意思?

    In the Angular 组件路由器文档 https docs angularjs org guide component router我刚刚偶然发现了一个我以前从未见过的 npm 命令 我不明白发生了什么 npm install an
  • Delphi:如何使用 $OVERFLOWCHECKS OFF 禁用溢出检查?

    我有一些代码会导致下溢 var t1 t2 delta DWORD begin t1 0xffffff00 t2 0x00000037 delta t2 t1 减法本身does生成上溢 下溢 但我不希望 Delphi 抛出EIntOverf
  • 如何从 Slack 获取用户 ID 到机器人服务

    我正在使用 Azure LUIS 创建一个简单的机器人 这是我的第一个机器人 经过一些研究后 我取得了一些不错的进展 现在还与 Slack 集成作为测试它的渠道 机器人功能运行良好 但我希望识别用户的身份 这样我就可以个性化机器人对话 并从
  • Python - 在 Flask 中将查询结果从服务器返回到客户端

    我拥有的 我在 Flask 中有一个客户端 服务器 客户端将 JSON 格式的查询发送到服务器 服务器创建一个 JSON 文件 还有另一个工具可以接受此查询 在数据库上执行它并将结果写入 results txt 文件 服务器定期检查 结果