2015-07-13 2 views
4

Есть ли способ скопировать запрос в задачу celery в Flask таким образом, чтобы задача выполнялась внутри контекста запроса, который инициировал задачу?
Мне нужно получить доступ к текущему пользователю безопасности флэшей в задаче celery, но поскольку задача находится вне контекста запроса, я не могу этого сделать. Мне нужна дополнительная информация из запроса, поэтому просто пересылка текущего пользователя на задание не приведет к трюку.Как сохранить контекст запроса в задаче celery, в Python Flask?

Моя задача действительно вставлена ​​в базу данных. Пользователю необходимо сохранить идентификатор пользователя, который создает строку. Передача объекта пользователя задаче решит проблему. Однако логика приложения такова, что каждая вставка/удаление/обновление регистрируется через событие flush, которое регистрирует пользователя, внесшего изменения, его IP, оригинальный URL-адрес, данные, которые он вставляет ...)

Журнал событий выполняется, как я сказал, перед запуском, и работает в 99% сценариях. Но когда у меня есть одно длинное задание, которое я хочу быть задачей сельдерей, данные запроса не доступен, не является текущий пользователь (так как он находится вне первоначального контекста запроса)

+0

Несомненно, я разработал свою ситуацию немного больше – Mensur

+0

Вы когда-нибудь находили ответ Менсур? – pors

ответ

0

не вне -the-box, чтобы передать объекты запроса или current_user в задачу сельдерея, поскольку они не являются сериализуемыми. Но люди работали над этим, создав оболочку для вызова задачи сельдерея в контексте запроса.

В блоге Celery task in a Flask request context подробно рассматривается эта тема. Резинки - Xion и производятся по aviaryan с оболочкой запроса.

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