我正在用 Python 创建一个网络服务,我有一个问题。我想分离用户登录用户数据。为此,我正在创建两个不同的 Python 程序。
例如:login.py -> localhost: 8080 userData.py -> localhost: 8081
我的问题是:如何在同一台服务器上运行这两个程序?有没有好用的 Python 应用服务器?
非常感谢你!
如果网络服务器嵌入在应用程序中,您可能希望使用一些“看门狗”应用程序来启动/停止/重新启动。
Ubuntu 使用新贵。
我也喜欢为此使用supervisord。
如果应用程序支持一些网络服务器集成协议,如 FCGI 或 WSGI(python 的标准),您可能希望使用网络服务器部署它。apache mod_wsgi用了很久,最近更倾向于使用nginx +uwsgi。Apache 是一个很好的网络服务器,但 nginx+wsgi 的扩展性更好。
[更新]
应用程序使用 Bottle + PyMongo (MongoDB) 你建议什么是可扩展的?
首先,您应该遵循框架文档中有关部署的建议(bottle对此主题并不冗长,所以我理解您为什么要问)。
B1评论是对的。您肯定希望将数据库和应用程序放在不同的服务器上。
为了以最小的模糊性获得最大的可扩展性,您可能需要查看一些 PassS 提供程序,例如heroku,此处的说明。如果您是开发人员而不是系统管理员,这特别有意义。
由于您在 Ubuntu 上,因此使用 bash:
./login.py &
./userData.py &
这将在后台运行这两个脚本。
如果您希望这些脚本在您关闭 shell 后继续运行:
at now < ./login.py
at now < ./userData.py
Tornado 是一个非常易于使用的应用服务器。您可以使用不同的请求处理程序侦听不同的端口。
它是可扩展的,可以处理数千个连接。我们用它来处理我们的控制台服务器。简单的 hello world 代码真的告诉你所有你需要知道的。我添加了另一个 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()