2009-02-01 89 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处理程序只是将一个作业放入一个管道中,一个完全独立的脚本执行它。你可以有任何数量的这些,并且你可以得到高级队列控制的好处等等。