2012-07-17 85 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/

相關問題