Доступ к контексту приложения фляги изнутри 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'
Другие вопросы по тегам