Ubuntu 11.10,Python 2.6。背景:我有一个现有的Python应用程序,它使用Twisted来循环并等待RESTful命令进来。所以应用程序启动,启动执行各种操作的线程,主要设置Twisted的回调,然后调用Twisted.reactor.run(),永远阻止。当请求进入时,调用适当的处理程序,发生事件,发送回复。
我的工作现在是删除Twisted,因为管理层已经决定他们不喜欢它。我们将迁移到Apache作为我们的Web服务器。
使用该文档,我已成功安装和配置Apache2.0以提供网页。我还安装了mod_wsgi,并且能够配置它和Apache在请求进入时执行任意Python代码。所以我很擅长这一点。
我缺少的是如何将我的Python应用程序连接到Apache / mod_wsgi位,因为应用程序需要持久且始终运行。有人建议我在我的wsgi脚本和我的主应用程序之间打开一个管道,并以这种方式序列化请求。但似乎这应该已经存在,我只是不知道要知道要搜索什么。
非常感谢任何朝着正确方向的推动。
为了清晰起见进一步编辑:我不是在制作网络服务器。有问题的应用程序是在虚拟机上运行的主机应用程序。它碰巧由RESTful接口通过HTTP控制。所以它需要做的就是能够监听传入的命令并回复它们。
mod_wsgi可能不适合这份工作,这很好,我只是不知道是什么。
答案 0 :(得分:1)
mod_wsgi的daemon mode是否在你的情况下提供了足够的持久性?或者如果你想与Apache分开运行主进程,那么mod_fastcgi怎么样?也许运行Apache作为反向代理也是一种选择。
答案 1 :(得分:0)
有人建议我在我的wsgi脚本和我的主应用程序之间打开一个管道,然后按顺序序列化请求。
这就是多处理队列的用途。
http://docs.python.org/library/multiprocessing.html
http://docs.python.org/library/multiprocessing.html#pipes-and-queues
如果你开始使用Celery,你会更开心。
Celery将允许您“删除Twisted,因为管理层已决定他们不喜欢它。”
然而。切换到芹菜意味着“所以应用程序启动,启动执行各种操作的线程,主要设置Twisted的回调,然后调用Twisted.reactor.run(),这将永远阻止”所有必须完全重新考虑。现在,您可以使用由芹菜协调的多个独立进程,而不是一些主要的轮询循环。
你会发现你的应用程序中的所有内务管理 - 线程之间的所有协调 - 回调 - 所有这些 - 将会消失。您将留下一些执行“实际工作”的Python脚本和Celery来管理分布式任务队列。