2015-07-22 3 views
-1

Я пытаюсь запланировать задачи, используя Celery и Python для флеш-приложения. Я в основном хочу запустить функцию в другом каталоге каждые х раз и сделать ее задачей сельдерея. Я импортировать функцию test_check и я пытаюсь поставить его под сельдерей задачи под названием testcheck(), однако, я получаю ошибку:Python, Celery, Flask, «работающий вне контекста приложения»

working outside of application context

Как я могу это исправить? Вот мои настройки:

from app import app 
from celery import Celery 
from datetime import timedelta 
from app.mod_check.views import test_check 

celery = Celery(__name__, 
      broker='amqp://guest:@localhost/', 
      backend='amqp://guest:@localhost/' 
      ) 

celery.config_from_object(__name__) 

@celery.task 
def add(x, y): 
    print "celery working!" 
    return x + y 

@celery.task 
def testcheck(): 
     test_check() 

CELERYBEAT_SCHEDULE = { 
    'add-every-30-seconds': { 
     'task': 'tasks2.testcheck', 
     'schedule': timedelta(seconds=5), 
     #'args': (16, 16) 
    }, 
} 

CELERY_TIMEZONE = 'Europe/London' 
+0

Вы видели эту [официальную фляжную документацию] (http://flask.pocoo.org/docs/0.10/patterns/celery/) на этом? – jonafato

+0

@jonafato с таким подходом Я получаю 'AttributeError: объект NoneType 'не имеет атрибута' is_authenticated'' –

ответ

1

test_check Независимо, оно делает что-то, что нуждается в контексте запроса. Поскольку задачи Celery не являются частью цикла HTTP-запроса/ответа, вам необходимо настроить контекст запроса вручную.

with app.test_request_context(): 
    test_check() 
Смежные вопросы