当我尝试挑选一个简单的可拾取对象时,我正在运行一个崩溃的服务器。如果打开调试模式,服务器只会崩溃。如果我删除debug=True
,服务器运行正常。当我将代码放入单个文件而不是包中时,我也无法复制错误。 Python 2.7和3.3都出现了这个问题。
收到'/'路径的get请求后,服务器崩溃。我没有得到任何关于出了什么问题或者发生了什么的反馈 - 浏览器页面就像挂载一样永远挂起。使用调试器运行程序没有帮助。
我怀疑,由于烧瓶自动重新加载模块的方式,pickle无法找到基类文件,但我不知道如何进一步探索这个想法。
我的程序包结构如下:
MyServer
__init__.py
runserver.py
。__ INIT __ 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
答案 0 :(得分:2)
我使用hanging_threads来获取线程等待的位置。 这是许多人中的一条:
File "C:\Python27\lib\subprocess.py", line 997, in wait
_subprocess.INFINITE)
Flask启动一个新进程,等待并提供输出我猜。 但如果它开始一个新的过程暗示:
app.run(debug=True)
也在孩子身上执行。
解决方案:
如果导入,请不要启动应用。 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.