Python 为什么pickle会破坏我的烧瓶服务器? 问题
我正在运行一个服务器,当我尝试pickle一个简单的、可pickle的对象时,该服务器崩溃。只有在调试模式打开时,服务器才会崩溃。如果删除Python 为什么pickle会破坏我的烧瓶服务器? 问题,python,flask,pickle,Python,Flask,Pickle,我正在运行一个服务器,当我尝试pickle一个简单的、可pickle的对象时,该服务器崩溃。只有在调试模式打开时,服务器才会崩溃。如果删除debug=True,服务器运行正常。当我将代码放入一个文件而不是一个包中时,我也无法复制错误。Python2.7和3.3都显示了这个问题 收到“/”路径的get请求后,服务器崩溃。我没有收到任何关于出错或正在发生什么的反馈-浏览器页面就像加载一样永远挂起。用调试器运行程序没有帮助 我的怀疑是,由于flask自动重新加载模块的方式,pickle在定位基类文件时
debug=True
,服务器运行正常。当我将代码放入一个文件而不是一个包中时,我也无法复制错误。Python2.7和3.3都显示了这个问题
收到“/”路径的get请求后,服务器崩溃。我没有收到任何关于出错或正在发生什么的反馈-浏览器页面就像加载一样永远挂起。用调试器运行程序没有帮助
我的怀疑是,由于flask自动重新加载模块的方式,pickle在定位基类文件时遇到了问题,但我不知道如何进一步探讨这个想法
代码
我有一个包的结构如下:
MyServer
__init__.py
runserver.py
__init_uuuuuuuuy.py:
import pickle
import flask
app = flask.Flask(__name__)
class Test(object):
def __init__(self, name):
self.name = name
@app.route('/')
def show_front():
o = Test('test')
x = pickle.dumps(o)
return x
app.run(debug=True)
runserver.py:
import MyServer
我过去常常到线程等待的地方。
这是许多行中的一行:
File "C:\Python27\lib\subprocess.py", line 997, in wait
_subprocess.INFINITE)
Flask启动一个新的进程,等待并服务于我猜的输出。
但如果它开始了一个新的过程,意味着:
app.run(debug=True)
也在子对象中执行
解决方案:
if __name__ == '__main__': app.run(debug=True)
runserver.py
更改为
import MyServer
MyServer.app.run(debug=True)
ccopy_reg _reconstructor p0 (cMyServer Test p1 c__builtin__ object p2 Ntp3 Rp4 (dp5 S'name' p6 S'test' p7 sb.
当你说它“崩溃”时,它会给你回溯吗?你能识别错误信息或行号吗?没有回溯。如果我尝试在浏览器中加载页面,浏览器就会挂在那里。当我尝试使用调试器时,进程就像在等待什么一样停止,但我不知道是什么。我按照您的建议更改了runserver.py,它似乎已经解决了问题。令人惊讶的是,除了泡菜之外,所有的东西似乎都运转良好。你知道为什么pickle会导致线程挂起吗?首先,我知道pickle使用
\uuuu import\uuu
为类加载模块。第二个烧瓶使用子流程/多流程。但我不知道,只能猜测pickle加载模块的次数可能不止一次?