2012-07-17 112 views
0

我正在Python中创建一个web服务,我有一个问题。我想分开用户登录用户数据。为此,我创建了两个不同的Python程序。在同一台服务器上运行多个Python程序(Ubuntu Server 12.04)

例如: login.py - >本地主机:8080 userData.py - >本地主机:8081

我的问题是:我怎么能运行在同一台服务器上的这两个节目?有没有一个易于使用的Python应用程序服务器?

非常感谢!

+0

,我不明白你的问题。这两个应用程序似乎都运行在不同的端口(8080和8081)。那么,究竟是什么问题? – 2012-07-17 17:18:56

+0

hm ...你的例子不起作用。你需要一台服务器。处理Web请求和处理/重新加载/记录Python脚本的服务器。不要忘了virtulenv。或者您必须在脚本中手动执行此项工作 – nk9 2012-07-17 17:47:30

回答

1

如果Web服务器嵌入在应用程序中,你可能需要使用一些“看门狗”应用启动/停止/重新开始。

Ubuntu使用upstart

我也喜欢使用supervisord

如果应用程序支持某些Web服务器集成协议(如FCGI或WSGI(Python标准)),则可能需要使用Web服务器进行部署。我已经使用apache mod_wsgi很长一段时间,最近我倾向于使用nginx + uwsgi。 Apache是​​一个很好的网络服务器,但nginx + wsgi扩展性更好。

[更新]

应用程序使用瓶+ PyMongo(MongoDB的),你有什么建议具有可扩展性?

首先,你应该按照关于部署的框架文档(瓶子不是详细的about this subject,所以我明白你为什么问)的建议。

B1评论是正确的。您一定希望将数据库和应用程序放在不同的服务器上。

为了获得最大的可扩展性和最小的模糊,您可能需要查看一些PasS提供商,如heroku,instructions here。如果您是开发人员而不是系统管理员,这很有意义。

+0

应用程序使用Bottle + PyMongo(MongoDB) 你推荐什么来扩展? – mhergon 2012-07-17 17:44:22

+1

@mhergon python上的任何应用程序都无法通过设计进行扩展。您可以将数据库移动到单独的服务器或nginx前端代理服务器,并将其加速到另一个应用程序。因此,对于Python而言,没有简单的解决方案,但像Disquss这样的许多成功案例 – nk9 2012-07-17 17:59:46

0

既然你是在Ubuntu上,使用bash:

./login.py & 
./userData.py & 

这将在后台运行这两个脚本。

如果想将这些脚本来继续运行你闭上你的后壳:

at now < ./login.py 
at now < ./userData.py 
+0

对于此技巧,需要使用'chmod u + x login.py userData.py'。但是这并没有帮助处理这个需求的代码请求python代码 – nk9 2012-07-17 17:51:17

0

Tornado是一个非常易于使用的应用服务器。您可以使用不同的请求处理程序在不同的端口上侦听。

它是可扩展的,可以处理数千个连接。我们用它来处理我们的控制台服务器。简单的hello世界代码真的告诉你所有你需要知道的。我添加了另一个的HttpServer,使单ioloop正在处理两个不同的端口的请求:

import tornado.ioloop 
import tornado.web 
from tornado.httpserver import HttpServer 

class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.write("Hello, world") 

class OtherHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.write("Goodbye, world") 

application1 = tornado.web.Application([ 
    (r"/", MainHandler), 
]) 
application2 = tornado.web.Application([ 
    (r"/", OtherHandler), 
]) 

if __name__ == "__main__": 
    HttpServer(application1).listen(8080) 
    HttpServer(application1).listen(8081) 
    tornado.ioloop.IOLoop.instance().start() 

http://www.tornadoweb.org/

相关问题