В настоящее время я пытаюсь удалить устаревшую среду Python (webware 0.8.1) и слой cherrypy 3.1.2 поверх него. Вместо того, чтобы преобразовывать все страницы веб-приложений в страницы с вишневым расширением, я просто обрабатываю их с помощью веб-приложений и передаю их таким образом.
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, который вызывает конструктор для parant cgi.FieldStorage. Вот где он наконец и висит.
Однако, если бы я нажал ctrl-c на терминале, он продолжил бы обработку и затем завершился бы после успешной загрузки страницы. Итак, на странице входа в систему я бы нажал «войти», он зависнет, затем я нажму ctrl-c на терминале, он войдет в систему и затем отключит cherrypy.
Я обнаружил, что если бы я использовал cherrypy.engine.start вместо quickstart, он бы не инициировал никаких обработчиков сигналов. То, что произойдет в этом случае, приведет к чему-то похожему на предыдущее, однако cherrypy продолжит работать.
Что может быть причиной этой проблемы? Я был бы очень признателен за любую помощь. Приветствия.