2009-02-01 45 views
14

同時學習一些基本的python編程,我發現web.py。我 卡住了一個愚蠢的問題:使用web.py作爲非阻塞http服務器

我寫了一個簡單的控制檯應用程序與一個主循環處理項目 從一個隊列在單獨的線程。我的目標是使用web.py將 項添加到我的隊列中,並通過Web請求報告隊列的狀態。我 得到這個作爲一個模塊運行,但不能集成到我的主要應用程序。 我的問題是當我用app.run()啓動http服務器時,它會阻止我的 主循環。 也試圖用thread.start_new_thread啓動它,但它仍然是 塊。 有沒有一種簡單的方法可以在我的應用程序中的 背景中運行web.py的集成http服務器。

中,我是一個基本的 missunderstanding的受害者,任何試圖澄清我的錯誤的推理 幫助可能的事件

;。)(請原諒,我是初學者:-)

+0

你不應該回答這個問題。 – iny 2009-02-05 18:24:55

回答

6

我找到了一個可行的解決方案。在一個單獨的模塊創建我的web服務器:

import web 
import threading 
class MyWebserver(threading.Thread): 

    def run (self): 
     urls = ('/', 'MyWebserver') 
     app = web.application(urls, globals()) 
     app.run() 

    def POST ... 

在主PROGRAMM我只是叫

MyWebserver().start() 

,比去與我想做的事情,同時具有網絡服務器在後臺運行。

+3

我有問題用Ctrl + C來殺死這個程序,其他人可以確認嗎? – puk 2013-10-08 00:12:05

1

將主循環代碼重寫爲一次又一次調用的函數並將其傳遞給runsimple ...

將不會更簡單完全滿足你的要求,但如果你急於求成,可能是最簡單的。

1

或只使用龍捲風,爲Python無阻塞的網絡服務器具有類似於webpy的API - http://www.tornadoweb.org/

+0

你可以提供一個MWE,他們的網站不是那麼好 – puk 2013-10-08 00:49:26

0

我最近還使用Beanstalkd排隊將在單獨的線程中運行的任務。你的web.py處理程序只是將一個作業放入一個管道中,一個完全獨立的腳本執行它。你可以有任何數量的這些,並且你可以得到高級隊列控制的好處等等。