2015-12-19 2 views
1

Когда я запускаю uwsgi в многопроцессорном режиме, он говорит, что pymongo должен запускаться со связью = False. Как я могу установить connect = False, если я запускаю flask-mongoengine?Запуск uwsgi с mongoengine

ответ

0

использовать ленивый вариант (--lazy) в вашем uwsgi.
mongoengine с многопроцессорной происходит тупиковой .. :(

3

Ну, как говорит Ju-вона подветренной, добавив опцию ленивым решает эту проблему, но настоятельно рекомендуется, как указано в документации uwsgi:

http://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html

UWSGI пытается (ab) использовать семантику копирования On Write для вызова fork() по возможности. По умолчанию он будет работать после того, как вы загрузили ваши приложения, чтобы как можно больше их памяти. Если это поведение нежелательно по какой-то причине, используйте опцию ленивых приложений. Это даст указание uWSGI загрузить приложение после каждой вилки работника(). Берегитесь, как есть старые варианты, названные лениво, что путь более инвазивная и крайне нежелательно (он все еще здесь только для обратной совместимости)

Таким образом, в случае, если вы хотите использовать эту опцию лучше использовать --lazy-приложение , Насколько я понимаю, проблема в том, что по умолчанию mongoengine for flask инициализирует только одно соединение, которое разветвленные proceses не могут использовать (из-за некоторых ограничений в клиенте pymongo). Что делает вариант ленивых приложений - загружать все для каждой вилки (которая использует больше памяти).

Существует декоратор, который позволяет запускать код сразу после создания предка.

Просто добавьте в ваше приложение:

from flask.ext.mongoengine import MongoEngine 
from uwsgidecorators import postfork 

app = Flask(__name__) 
# do whatever you want with the application 

db = MongoEngine() # set db as MongoEngine (without any app or configuration) 

@prefork 
def setup_db(): 
    db.init_app(app) # this code actually calls to "connect" in pymongo 

# define the rest of calls, etc 

Я надеюсь, что этот ответ добавляет некоторые разъяснения!

+1

Если декоратор на setup_db() в вашем примере кода будет @postfork, а не @prefork? –

Смежные вопросы