我目前正在尝试删除一个遗留的 python 框架(webware 0.8.1)并在其上分层cherrypy 3.1.2。我没有将所有 webware 页面转换为cherrypy 页面,而是通过 webware 对其进行处理并将其传递给cherrypy。
def default(self, url, *suburl, **kwarg):
...snip...
strmout = DispatcherIO()
request = HTTPRequest(local_req)
transaction = self.create_transaction(request)
response = self.create_response(transaction, strmout)
transaction.setServlet(servlet)
transaction.awake()
transaction.respond()
return str(strmout)
这适用于任何不包含 POST 的页面。但是对于任何包含诸如登录之类的帖子的页面,cherrypy 都会挂在:
request = HTTPRequest(local_req)
这将调用 FieldStorage,后者将调用父 cgi.FieldStorage 的构造函数。这是它最终挂起的地方。
但是,如果我在终端上按 ctrl-c,它将继续处理,然后在页面成功加载后终止。所以在登录页面,我会点击“登录”,它会挂起,然后我会在终端上按 ctrl-c,它会让我登录,然后关闭cherrypy。
我发现如果我使用 cherrypy.engine.start 而不是 quickstart 它不会启动任何信号处理程序。在这种情况下会发生什么会导致与之前的行为类似的结果,但是cherrypy 会继续运行。
什么可能导致这个问题?我真的很感激任何帮助。干杯。