代码之家  ›  专栏  ›  技术社区  ›  Titusz

使用web.py作为非阻塞http服务器

  •  14
  • Titusz  · 技术社区  · 17 年前

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

    我编写了一个简单的控制台应用程序,其中有一个处理项目的主循环 从不同线程中的队列。我的目标是使用web.py添加 将项目添加到我的队列中,并通过web请求报告队列的状态。我 已将此作为模块运行,但无法将其集成到我的主应用程序中。 我的问题是,当我用app.run()启动http服务器时,它会阻止我的 主回路。 也尝试用thread.start_new_thread启动它,但它仍然 有没有一种简单的方法可以运行web.pys集成的http服务器 我的应用程序中的背景。

    在可能的情况下,我是一个基本的 理解错误,任何试图澄清我推理错误的行为都会 帮助;)(请容忍我,我是初学者:-)

    4 回复  |  直到 14 年前
        1
  •  8
  •   Titusz    16 年前

    我找到了一个有效的解决办法。在一个单独的模块中,我创建了我的Web服务器:

    import web
    import threading
    class MyWebserver(threading.Thread):
    
        def run (self):
            urls = ('/', 'MyWebserver')
            app = web.application(urls, globals())
            app.run()
    
        def POST ...
    

    在主程序中,我只是调用

    MyWebserver().start()
    

        2
  •  1
  •   Shalom Craimer    17 年前

    runsimple ...

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

        3
  •  1
  •   Terrence Brannon    16 年前

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

        4
  •  0
  •   T3db0t    15 年前

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