我有一个用 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/