Я использую бутылку как веб-фреймворк Python.Глобальные переменные, потерянные в маршруте бутылок
В принципе, вот что я делаю:
auth.py:
from bottle import get
logger = None
webserver = None
def load(server):
global logger, webserver
logger = server.getLogger('auth')
webserver = server
@get('/auth')
def auth():
logger.debug('Entering route')
webserver.py:
import bottle
import imp
class WebServer(object):
# ...
def getLogger(self, name):
# ...
def start_wsgi(self):
# ...
app = bottle.default_app()
mod = imp.load_source('auth', 'auth.py')
mod.load(self)
# ...
return app
# ...
ws = WebServer()
app = ws.start_wsgi()
NB: нет обработки ошибок или Дополнительный код здесь, я просто рассказал, что интересно в этом вопросе (по-моему)
Похоже, что глобальный масштаб не разделяются между основным процессом (который запускает WebServer
кода) и для обработки запроса нити (logger
еще None
, когда я попал в /auth
URL).
Печатая id(logger)
в функции load()
и маршрут auth()
(с добавил global logger
, просто чтобы быть уверенным), я получаю две разные идентификаторы.
Как я могу поделиться своими регистраторами с потоками, обрабатывающими запрос?
PS: Я попытался добавить поле для применения в бутылки по умолчанию, например:
app = default_app()
app.logger = # mylogger
, а затем в маршруте:
app = default_app()
app.logger.debug('Message')
Но мне кажется, что даже default_app()
является другой.
Функция '' Webserver.getLogger'' инициализирует регистратор для того же уровня ведения журнала, который используется в классе '' Webserver''. И мне все еще нужна глобальная ссылка на '' webserver'' (такая же проблема, как '' logger'') – linkdd
Тогда, боюсь, я не совсем понимаю, что вы спрашиваете. Что мешает вам ссылаться на «веб-сервер»? –
В этом вопросе, на маршруте ''/auth'', '' webserver'' и '' logger'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' веб сервер. – linkdd