Доступ к контексту приложения фляги изнутри greenlet
У меня есть команда скрипт-колба, которая порождает длинную последовательность гринлетов. Проблема в том, что эти гринлеты не могут получить доступ к контексту моего приложения. Я постоянно получаю сообщение "> с RuntimeError" (обращаясь к app.logger, для каждого примера). Предложения?
Одна из моих попыток: spawn(метод, приложение, arg1, arg2)
def spawn(app, arg1, arg2):
with app.app_context():
app.logger.debug('bla bla') # doesn't work
... do stuff
2 ответа
Изменить: ниже дает вам доступ к request
объект, но не current_app
, вероятно, не то, что вы ищете.
Вы, вероятно, ищете flask.copy_current_request_context(f)
что задокументировано здесь: http://flask.pocoo.org/docs/0.10/api/
Пример:
import gevent
from flask import copy_current_request_context
@app.route('/')
def index():
@copy_current_request_context
def do_some_work():
# do some work here, it can access flask.request like you
# would otherwise in the view function.
...
gevent.spawn(do_some_work)
return 'Regular response'
Вы можете передать копию соответствующей информации из запроса, например,
import gevent
@app.route('/')
def index():
def do_some_work(data):
# do some work here with data
...
data = request.get_json()
gevent.spawn(do_some_work, data)
return 'Regular response'