【问题标题】:Proper way to communicate with a running python from javascript [closed]从javascript与正在运行的python通信的正确方法[关闭]
【发布时间】:2018-11-14 16:24:36
【问题描述】:

我的目标:

  1. 正在运行的 python 不断更改变量的值。
  2. 使用html和javascript在浏览器上实时显示变化的值,只要python在改变值。

以下是我用谷歌搜索的解决方案:

  1. 使用 Flask 编写 python 代码
  2. 请求通过 Ajax 从 javascript 运行 python
  3. python 将变量作为 JSON 响应回 javascript

基于这个解决方案,我有以下问题,如果有任何误解,请随时纠正我。

  1. 必须先手动执行python,然后javascript才能向http://localhost:5000/[...some @app.route()]发送ajax请求。在第一个 ajax 请求之后,我需要 python 开始无限运行(while 循环)。

  2. Flask python 不能有while循环。不确定Flask中app.run()的机制。

  3. 一旦实现了第一点,一旦 python 更改变量,javascript 还必须不断更新 html。现在看来我必须继续发送ajax请求才能从python获取变量。

非常感谢任何信息来解决我的问题!

【问题讨论】:

  • @georg 给了你一个很好的大纲。请注意,running pythons 可以穿各种鞋子,例如 Flask、Pyramid、Django(或者只是赤脚)。另外,请注意,在某些情况下,JavaScript 本身就是一个非常好的跑步者(还有很多鞋子可供选择)。换句话说,根据您想要完成的具体任务,您可能不需要 Python 和/或任何相关框架。
  • 谢谢,我之所以选择这种组合(python 和 javascript)是因为 javascript 无法使用内存地址访问变量。因此,我选择让 python 为 javascript 处理这部分。有什么好的解决方法吗?
  • 我不知道如何获取 JavaScript 变量的内存地址。也就是说,我不确定您在做什么来初始化和更改问题中变量的值,因此无法评论您是否真的可以放弃计划的服务器端方面,但如果你正在做的不需要某种持久存储,那么 JavaScript 和类似的东西当然值得考虑来简化你的过程。

标签: javascript python ajax windows flask


【解决方案1】:

基本上,你需要三个部分

  • 你的python循环A
  • Web 应用程序 B
  • 和一个 javascript 应用程序 C

您可以将 A+B 组合到一个进程中,在这种情况下,您必须在单独的线程中运行循环,或者您可以使用任何可用的 IPC 方式(例如共享内存/管道/套接字)在 A 之间进行通信和 B。一个简单的解决方案是使用数据库服务器,A 向该服务器写入数据,B 从该服务器读取数据。

如果A和B是分开的,那么B不一定是python,你可以用js或php或其他任何方式编写。

为了避免在客户端轮询,可以使用WebSockets在B和C之间进行通信。

【讨论】:

  • 谢谢!只是为了确保我的理解:对于 A 和 B,我可以在 python 中使用烧瓶和多线程。对于 B 和 C 通信,我应该在 javascript 中使用 websocket 而不是 ajax。
  • @ctheadn8954:是的,没错。
  • 哦!搜索了一下之后。看来我还是得先手动运行python。是否可以从 javascript 启动 python??
  • @ctheadn8954:来自客户端javascript的服务器python?没有
  • 是的。很遗憾知道这一点,但明白了。谢谢!
【解决方案2】:

您必须在另一个线程或进程中运行 while 循环,例如使用 flask-celery

javascript更新可以通过setTimeout实现

【讨论】:

  • georg 是对的,websockets io 可能是更好的解决方案
猜你喜欢
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
相关资源
最近更新 更多