【问题标题】:Communicate with long-running Python program与长时间运行的 Python 程序通信
【发布时间】:2014-08-08 06:05:55
【问题描述】:

我在服务器上有一个长时间运行的 Python 程序,它已经在一个串行端口上侦听消息并将它们转发到另一个串行端口。

我需要做什么才能让该程序接受来自网络服务器的数据(最终从笔记本电脑上的网络浏览器获取数据)?

目前我看到的选项是:

  • 烧瓶() 解决方案在“ Communicating with python program running on server "服务器 似乎对我不起作用,因为 (我可能做错了) 长时间运行的 Python 程序似乎无法抢占 80 端口, 我猜是因为网络服务器已经在端口 80 上运行(服务其他页面)。

  • 有一个将数据写入文件的 CGI 脚本,而长时间运行的脚本会从该文件中读取数据。我有点不愿意在闪存磨损可能成为问题的系统上执行此操作。

  • 不知何故 (?) 转换长时间运行的脚本 到一个 FastCGI 脚本,其中包括它过去所做的一切以及从 Web 服务器接受数据的新内容。

  • 不知何故 (?) 转换长时间运行的脚本 到一个 WSGI 脚本,其中包括它过去所做的一切以及从 Web 服务器接受数据的新内容。

  • 编写一个简短的 web 脚本,让 web 服务器启动,它使用 asynchat / asyncore / sockets / twisted 与长时间运行的脚本进行通信,这似乎是为两台不同计算机之间的通信而设计的,所以看起来就像在长时间运行的 Python 脚本和运行在同一台服务器上的 Web 服务器(可能在它们之间有一个短时间的 CGI 脚本或 FastCGI 脚本)之间进行对话时矫枉过正。

  • 也许还有其他选择?

网络服务器是否有标准的“pythonic”方式将数据传递给已经启动并运行的 Python 程序? (而不是更常见的 Web 服务器启动 Python 程序并将数据传递给新启动的程序的情况)。

(我怀疑不相关的细节:我的服务器在 Beaglebone Black 上运行的 Ubuntu Linux 上运行 Lighttpd)。

(也许这个问题应该移到https://softwareengineering.stackexchange.com/?)

【问题讨论】:

    标签: python multiple-processes


    【解决方案1】:

    您可以设置您的 python 进程以使用任何其他端口(例如 8091)。然后配置您的网络服务器以使用 proxypas 将某些(或所有)请求转发到该端口。 Apache 示例:

    <VirtualHost yourdomain.for.python.thread>
        ServerName  localhost
        ServerAdmin webmaster@example.com
    
        ProxyRequests off
        ProxyPass * http://127.0.0.1:8091
    </VirtualHost>
    

    我以前这样做是为了快速让 Django 服务器处于开发模式以通过网络服务器显示页面。如果你真的想提供 html 内容,这不是最有效的方法。

    【讨论】:

      猜你喜欢
      • 2010-10-16
      • 2011-08-31
      • 2022-07-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      相关资源
      最近更新 更多