Использование Memcached с чертежами колб - PullRequest
0 голосов
/ 28 августа 2018

В контексте приложения я не могу установить объекты в memcached. Журналы указывают, что я подключаюсь к memcached, но когда я пытаюсь установить объект, функция set возвращает «0» или False. Вне контекста приложения я могу подключаться к IP-адресу и порту сервера и легко получать и устанавливать объекты. Вот мои настройки:

Приложение / __ __ INIT. Ру

class App(Flask):

def __init__(self):
    super(App, self).__init__(__name__)
    self.config.from_object('app.config')
    self.config.from_object('app.deployments.Prod')
    logging.basicConfig(filename=self.config['LOG_PATH'] + config.LOG_FILE, level=logging.INFO, format=config.LOG_FORMAT, datefmt='%m/%d/%Y %I:%M:%S')
    self.static_folder=config.STATICS
    self.before_request(self.init_dbs)
    self.teardown_request(self.teardown)
    self.after_request(self.teardown)
    try:
        self.init_session()
        self.init_login()
        self.init_templates()
    except Exception as e:
        logging.info(e)

def init_dbs(self):
    g.ES = init_elasticsearch(hosts=self.config['ES_HOSTS'])
    g.MEMCACHED = init_memcached(host=self.config['MEMCACHED_HOST'],port=self.config['MEMCACHED_PORT'])


...

Кэш / __ __ INIT. Ру

from werkzeug.contrib.cache import MemcachedCache
import gevent
import logging

def init_memcached(host,port):
    memcached_connected = False
    while not memcached_connected:
        try:
            MEMCACHED = MemcachedCache([host + ':' + str(port)])
            memcached_connected = True
        except Exception as e:
            logging.info("Memcached not connected")
            logging.error(e)
            gevent.sleep(1)
    return MEMCACHED

Контроллеры / page.py

from flask import Blueprint, request, render_template, url_for, flash, g, redirect
from flask.views import MethodView
from flask.ext.login import current_user
from json import dumps
from app import config
...

items = Blueprint(
    'items',
    __name__,
    template_folder=config.TEMPLATES,
)

class Item(MethodView):
    def get(self,item):
        result = g.MEMCACHED.get('item')
        if result is None:
            ...
            g.MEMCACHED.set('item', result, timeout=60)
        return render_template('item.html',result=result)

items.add_url_rule("/path/<item>", view_func=Item.as_view('item'))

Я предполагаю, что это как-то связано с использованием memcached внутри объекта g. Я бы предпочел установить подключение к memcached один раз, как я делаю с dbs, но похоже, что memcached не отвечает таким же образом.

...