【问题标题】:How to run web.py server inside of another application如何在另一个应用程序中运行 web.py 服务器
【发布时间】:2012-03-15 06:10:11
【问题描述】:

我有一个用 Python 编写的小型桌面游戏,希望能够在游戏运行时访问它的内部。我正在考虑通过在单独的线程上运行 web.py 并提供页面来做到这一点。因此,当我访问http://localhost:8080/map 时,它会显示当前级别的地图以进行调试。

我安装并运行了 web.py,但我真的不知道从这里去哪里。我尝试在单独的线程中启动 web.application,但由于某种原因,我无法在线程之间共享数据(我认为)。

下面是一个简单的例子,我正在使用测试这个想法。我以为http://localhost:8080/ 每次都会返回不同的数字,但它一直显示相同的数字 (5)。如果我在 while 循环中打印 common_value,它会递增,但它从 5 开始。

我在这里遗漏了什么,这种方法在任何地方都接近合理吗?如果可能的话,我真的很想避免使用数据库。

import web
import thread

urls = (
    '/(.*)', 'hello'
)

app = web.application(urls, globals())

common_value = 5

class hello:        
    def GET(self):  
        return str(common_value)

if __name__ == "__main__":
    thread.start_new_thread(app.run, ())    
    while 1:
        common_value = common_value + 1

【问题讨论】:

    标签: multithreading web.py


    【解决方案1】:

    经过一番搜索,我找到了一个可行的解决方案:

    如果 common_value 在单独的模块中定义并从那里导入,则上述代码有效。所以本质上(请原谅命名):

    thingy.py

    common_value = 0
    

    server.py

    import web
    import thread
    import thingy
    
    import sys; sys.path.insert(0, ".")
    
    urls = (
        '/(.*)', 'hello'
    )
    
    app = web.application(urls, globals())
    
    thingy.common_value = 5
    
    class hello:        
        def GET(self):               
            return str(thingy.common_value)
    
    if __name__ == "__main__":
        thread.start_new_thread(app.run, ())    
        while 1:
            thingy.common_value = thingy.common_value + 1
    

    【讨论】:

    • code, def GET(self): return str(thingy.common_value) code
    【解决方案2】:

    我发现参数有错误,但是 改变 : def GET(self)

    与:

    def GET(self, *args):
    

    现在可以使用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多