17

在使用 python 学习一些基本编程时,我发现了 web.py。我遇到了一个愚蠢的问题:

我写了一个简单的控制台应用程序,它有一个主循环,它在单独的线程中处理队列中的项目。我的目标是使用 web.py 将项目添加到我的队列并通过 Web 请求报告队列的状态。我把它作为一个模块运行,但不能将它集成到我的主应用程序中。我的问题是当我使用 app.run() 启动 http 服务器时,它会阻塞我的主循环。还尝试使用 thread.start_new_thread 启动它,但它仍然阻塞。有没有一种简单的方法可以在我的应用程序的后台运行 web.py 的集成 http 服务器。

万一我是一个基本误解的受害者,任何试图澄清我的推理错误都会有所帮助;.)(请耐心等待,我是一个初学者:-)

4

4 回答 4

8

我找到了一个可行的解决方案。在一个单独的模块中,我创建了我的网络服务器:

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

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

    def POST ...

在主程序中我只是调用

MyWebserver().start()

而不是在让网络服务器在后台工作时继续我想要的任何东西。

于 2010-10-16T16:42:00.990 回答
1

将您的主循环代码重写为您一遍又一遍地调用的函数,然后从您传递给的函数中调用它不是更简单runsimple...

保证不能完全满足您的要求,但如果您赶时间,这可能是最简单的。

于 2009-02-01T21:01:21.173 回答
1

或者只是使用 Tornado,一个用于 Python 的非阻塞网络服务器,其 API 类似于 webpy - http://www.tornadoweb.org/

于 2009-12-09T07:39:09.927 回答
0

我最近还使用Beanstalkd对将在单独线程中运行的任务进行排队。您的 web.py 处理程序只是将一个作业放入管道中,然后由一个完全独立的脚本执行它。您可以拥有任意数量的这些,并且您可以获得高级队列控制等的好处。

于 2010-12-07T23:39:22.653 回答