Вы не можете использовать глобальные переменные для хранения таких данных. Это не только безопасный поток, это не процесс безопасен, а WSGI-серверы на производстве порождают множество процессов. Мало того, что ваши подсчеты были бы неправильными, если бы вы использовали потоки для обработки запросов, они также будут меняться в зависимости от того, какой процесс обрабатывал запрос.
Используйте источник данных за пределами флажка для хранения глобальных данных. База данных, memcached или redis - все соответствующие области хранения, в зависимости от ваших потребностей. Если вам нужно загрузить и получить доступ к данным Python, рассмотрите multiprocessing.Manager
. Вы также можете использовать сеанс для простых данных, предназначенных для каждого пользователя.
Сервер разработки - это единственный поток, по умолчанию один процесс. Вы не увидите поведение, которое вы описываете, поскольку каждый запрос будет обрабатываться синхронно. Включите потоки или процессы, и вы увидите это. app.run(threaded=True)
или app.run(processes=10)
.
Некоторые серверы WSGI могут поддерживать gevent или другого асинхронного рабочего. Глобальные переменные по-прежнему не являются потокобезопасными, поскольку по-прежнему нет защиты от большинства условий гонки. У вас все еще может быть сценарий, когда один работник получает значение, дает, другой его модифицирует, дает, то первый работник также модифицирует его.
Когда вы экспортируете проект как «Runnable jar» (правая мышь в проекте -> Export -> Runnable jar), вы можете упаковать все зависимости в сгенерированную банку. Он также имеет два других способа (см. Скриншот) для экспорта ваших библиотек, помните о лицензиях при выборе способа упаковки, который вы будете использовать.
[/g2]
Выпадающее меню «Пуск» заполняется классами, содержащими метод main(String[])
. Выбранный класс запускается, когда вы запускаете jar.
Экспорт в качестве исполняемой банки использует зависимости в вашем пути сборки (правая кнопка мыши в проекте -> путь сборки -> настройка пути сборки ...) , Когда вы экспортируете как «регулярную» (не исполняемую) банку, вы можете выбрать любой файл в своих проектах. Если у вас есть библиотеки в папке проекта, вы можете включить их, но внешние зависимости, например maven , не могут быть включены (для проектов maven, поиск здесь ).
Вы можете использовать Export-> Java-> Runnable Jar, чтобы создать банку, которая включает в себя ее зависимости
. Кроме того, вы можете использовать плагин fatjar eclipse, а также для объединения сосуды вместе
Экспортируя источник в банку, убедитесь, что вы выбрали опцию runnable jar из опций. Затем выберите, хотите ли вы упаковать все банки зависимостей или просто включить их непосредственно в файл jar. Это зависит от проекта, над которым вы работаете.
Затем вы запускаете банку непосредственно java -jar example.jar.
Если это автономный (Основной метод) java-проект, то ни один конкретный путь не помещает все банки внутри проекта не в какой-либо конкретный путь, а затем щелкните правой кнопкой мыши по проекту -> export -> Runnable jar -> Выберите конфигурацию обеда и обработкой библиотеки, затем выберите параметр переключателя «Необходимые библиотеки пакетов в сгенерированную банку» -> «Готово».
Или
Если у вас есть веб-проект, тогда поместите все банки в сеть -inf / lib и выполните тот же шаг.
Вы можете щелкнуть правой кнопкой мыши по проекту, нажать на экспорт, набрать «jar», выбрать «Runnable JAR File Export». Там у вас есть опция «Извлечь необходимые библиотеки в сгенерированный JAR».
Если вы хотите экспортировать все JAR-файлы веб-проекта Java, откройте последний созданный WAR-файл с помощью ZIP-инструмента (например, 7-Zip), перейдите в папку / WEB-INF / lib /. Здесь вы найдете все JAR-файлы, которые вам нужны для этого проекта (как указано в «Связанные библиотеки»).
Чтобы создать файл jar в eclipse, щелкните правой кнопкой мыши проект, для которого вы хотите сгенерировать, выберите «Экспорт»> «Java»> «Runnable Jar File»,
Создает банку, которая включает все зависимости от Pom.xml, но, пожалуйста, убедитесь, что проблема с лицензией, если вы используете стороннюю зависимость для вашего приложения.
Лично
Ни один из вышеперечисленных ответов не работал для меня, я все равно продолжал получать ошибки NoClassDefFound (я использую Maven для зависимостей). Мое решение заключалось в создании с использованием «mvn clean install» и использовании «[project] -jar-with-dependencies.jar», созданного этой командой. Аналогично в Eclipse вы можете щелкнуть правой кнопкой мыши проект -> Run As -> Maven Install, и он поместит банки в целевую папку.