与长期运行的Python程序通信

时间:2014-08-08 06:05:55

标签: python multiple-processes

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

如果允许该程序接受来自Web服务器的数据(最终从笔记本电脑上的Web浏览器获取数据),我需要做些什么?

我到目前为止看到的选项是:

  • 烧瓶() 解决方案在" Communicating with python program running on server"服务器 似乎不适合我,因为 (我可能做错了) 长期运行的Python程序似乎无法抓住端口80, 我想因为Web服务器已经在端口80上运行(提供其他页面)。

  • 有一个CGI脚本将数据写入文件,长时间运行的脚本从该文件中读取数据。我不太愿意在可能引起闪光磨损的系统上这样做。

  • 以某种方式(?)转换长时间运行的脚本 一个FastCGI脚本,包括它曾经做过的所有事情以及从Web服务器接受数据的新东西。

  • 以某种方式(?)转换长时间运行的脚本 一个WSGI脚本,包括它曾经做过的所有事情以及从Web服务器接受数据的新东西。

  • 编写Web服务器启动的简短Web脚本,使用asynchat / asyncore / sockets / twisted与长时间运行的脚本进行通信,这些脚本似乎是为两台不同计算机之间的通信而设计的,所以在长时间运行的Python脚本和在同一台服务器上运行的Web服务器(可能有一个短时间的CGI脚本或FastCGI脚本)之间进行交谈时,似乎有些过分了。

  • 也许还有其他一些选择?

是否有标准" pythonic" Web服务器将数据传递给已经启动并运行的Python程序的方法? (而不是更常见的Web服务器启动 Python程序并将数据移交给新启动的程序)。

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

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

1 个答案:

答案 0 :(得分:0)

您可以将python进程设置为使用任何其他端口(f.e.8091)。配置您的Web服务器以使用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内容,这不是最有效的方式。