在学习python的基本编程时,我找到了web.py.一世 陷入了一个愚蠢的问题:
我写了一个简单的控制台应用程序,其主循环可以处理项目 从单独的线程中的队列。我的目标是使用web.py来添加 项目到我的队列并通过Web请求报告队列的状态。一世 让它作为一个模块运行,但无法将其集成到我的主应用程序中。 我的问题是当我用app.run()启动http服务器时它会阻止我的 主循环。 也尝试用thread.start_new_thread启动它,但它仍然 块。 是否有一种简单的方法来运行web.py的集成http服务器 我的应用程序中的背景。
在可能的情况下,我是一个基础的受害者 误解,任何澄清我的推理错误的尝试都会 帮助;。)(请耐心等待我,我是初学者:-)
答案 0 :(得分:6)
我找到了一个有效的解决方案。在一个单独的模块中,我创建了我的网络服务器:
import web
import threading
class MyWebserver(threading.Thread):
def run (self):
urls = ('/', 'MyWebserver')
app = web.application(urls, globals())
app.run()
def POST ...
在主程序中我只需拨打
MyWebserver().start()
然后在网络服务器在后台运行时继续我想要的任何内容。
答案 1 :(得分:1)
将主循环代码重新编写为一次又一次调用的函数,然后从传递给runsimple
的函数中调用它会不会更简单... < / p>
保证不能完全满足您的要求,但如果您匆忙,这可能是最简单的。
答案 2 :(得分:1)
或者只是使用Tornado,一个非阻塞的Python网络服务器,其API类似于webpy - http://www.tornadoweb.org/
答案 3 :(得分:0)
我最近还使用Beanstalkd来排队将在单独的线程中运行的任务。你的web.py处理程序只是将一个作业放入一个管道,一个完全独立的脚本执行它。您可以拥有任意数量的这些,并且您可以获得高级队列控制等优势。