Python / Flask: приложение запускается после закрытия

#python #eclipse #web-applications #flask #pydev

#python #eclipse #веб-приложения #flask #pydev

Вопрос:

Я работаю над простым веб-приложением Flask. Я использую Eclipse / Pydev. Когда я работаю над приложением, мне приходится очень часто перезапускать это приложение из-за изменений кода. И в этом проблема. Когда я запускаю приложение, я вижу фрейм на своем локальном хосте, и это хорошо. Но когда я хочу закрыть это приложение, просто нажмите на красный квадрат, который должен останавливать приложения в Eclipse, иногда (часто) старая версия приложения продолжает работать, поэтому я не могу протестировать новую версию. В этом случае единственное, что помогает, — принудительно закрыть каждый процесс в диспетчере задач Windows.

Не могли бы вы дать мне какой-нибудь совет, как справиться с этой проблемой? Заранее благодарю вас.

РЕДАКТИРОВАТЬ: это может помочь: много раз мне приходится запускать приложение дважды. В противном случае я не могу подключиться.

Комментарии:

1. Вы настраиваете app.debug=True в своем приложении? См. Режим отладки flask это автоматически перезагрузит приложение на основе ваших изменений кода. Поэтому вам нужно запустить приложение только один раз . Вы также не должны запускать его в «режиме отладки» (независимо от эквивалента в Eclipse). Вместо этого просто запустите его как обычное приложение. Из-за любого прерывания, если вы работаете в режиме отладки, поток не останавливается, а только блокируется. Это то, что вы делаете?

2. @BurhanKhalid Да, у меня установлен режим отладки. Я думаю, что он работает лучше без режима отладки, но иногда тоже возникают проблемы.

3. @Milano Я столкнулся с той же проблемой. Я использую spyder IDE для запуска приложения и Chrome, чтобы увидеть результат. Нашли ли вы какое-либо решение для решения этой проблемы?

Ответ №1:

Я столкнулся с той же проблемой и решил ее. Я думаю, это может помочь.

Когда мы запускаем сайт на основе flask локально, ему присваивается TCP-порт: 5000 и IP-адрес по умолчанию: 127.0.0.1:5000

Иногда TCP-соединение остается даже после закрытия программы или завершения кода. Итак, идея в том, чтобы прервать TCP-соединение. Вы можете сделать это из командной строки (cmd)

Необходимо выполнить два шага:
1. Посмотрите идентификатор процесса (PID) для текущего TCP-соединения.
Перейдите в cmd и введите:

 netstat -ano
  

введите описание изображения здесь

  1. Завершите процесс с помощью PID. Команда для этого: taskkill /f /im [PID] . Пример показан ниже.

    taskkill /f / im 7332

Комментарии:

1. Это сработало для меня. Я получал: OSError: [Errno 22] Invalid argument . В конце концов я понял, что это происходит с сервера ghost Flask более раннего завершения работы IDE, а не с сервера, который я только что запустил. Использование Flask под JetBrains PyCharm IDE.

Ответ №2:

Со мной случилось очень похожее. Я использовал CherryPy, а не Flask, но мое решение все равно может сработать для вас. Часто браузеры сохраняют веб-страницы локально, чтобы им не приходилось повторно загружать их при каждом посещении веб-сайта. Это называется кэшированием, и хотя оно очень полезно для обычного веб-пользователя, оно может стать настоящей проблемой для разработчиков приложений. Если вы часто создаете новые версии приложения, возможно, ваш браузер отображает старую версию приложения, которую он кэшировал, вместо самой последней версии. Я рекомендую очищать этот кеш при каждом перезапуске приложения или вообще отключать кеш.

Комментарии:

1. Я пытался очистить кеш, но моя проблема продолжает существовать. Итак, я попытался запустить Internet Explorer (я использую Chrome) и введите 127.0.0.1: 5000 , и я увидел, что приложение запущено, но я остановил его в Eclipse раньше.. Вероятно, это не будет проблемой с кешем…

Ответ №3:

На самом деле этого не должно происходить с последними версиями PyDev (т.Е.: начиная с PyDev 3.4.1: http://pydev.org/history_pydev.html , PyDev должен уничтожить все подпроцессы основного процесса).

Итак, можете ли вы проверить, какую версию PyDev вы используете?

Если вы используете последнюю версию PyDev, вы можете использовать Ctrl Shift F9 для завершения / перезапуска по умолчанию.

Но поскольку вы имеете дело с flask, вы должны иметь возможность использовать его для автоматической перезагрузки при изменении кода, ничего не делая, установив use_reloader=True .

Т.е.: я на самом деле не тестировал, но в его документации говорится, что вы можете установить флаг перезагрузки для этого запуска (use_reloader=True) — и PyDev должен даже иметь возможность отлаживать его (я рассмотрю и улучшу документы PyDev в этой области позже).).