Python 为什么pickle会破坏我的烧瓶服务器? 问题

Python 为什么pickle会破坏我的烧瓶服务器? 问题,python,flask,pickle,Python,Flask,Pickle,我正在运行一个服务器,当我尝试pickle一个简单的、可pickle的对象时,该服务器崩溃。只有在调试模式打开时,服务器才会崩溃。如果删除debug=True,服务器运行正常。当我将代码放入一个文件而不是一个包中时,我也无法复制错误。Python2.7和3.3都显示了这个问题 收到“/”路径的get请求后,服务器崩溃。我没有收到任何关于出错或正在发生什么的反馈-浏览器页面就像加载一样永远挂起。用调试器运行程序没有帮助 我的怀疑是,由于flask自动重新加载模块的方式,pickle在定位基类文件时

我正在运行一个服务器,当我尝试pickle一个简单的、可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)
也在子对象中执行

解决方案:

  • 如果导入,请不要启动应用程序<代码>应用程序运行(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加载模块的次数可能不止一次?