multithreading - 如何在另一个应用程序中运行 web.py 服务器

标签 multithreading web.py

我有一个用 Python 编写的小桌面游戏,希望能够在游戏运行时访问它的内部。我正在考虑通过在单独的线程上运行 web.py 并提供页面来实现此目的。所以当我访问http://localhost:8080/map时它将显示当前级别的 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

最佳答案

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

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

东西.py

common_value = 0

服务器.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

关于multithreading - 如何在另一个应用程序中运行 web.py 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9714777/

相关文章:

c++ - decaf 线程 vs boost 线程 vs omnithreads

python - 如何在 webpy 中记录消息?

python - ImportError : numpy. core.multiarray 在使用 mod_wsgi 时导入失败

javascript - PHP的多线程ajax调用

c++ - 多线程访问同一个双端队列C++

python - Github api v3 通过 python oauth2 库访问 - 重定向问题

python - uWSGI和Nginx中MySQL连接出现502错误

javascript - Webpy 和 javascript 重新加载内容

c++ - 在单核 CPU 上写入变量是原子的吗?

c# - 如何使用匿名方法设置线程名称?