我正在尝试使用Celery和Python为Flask应用安排任务。我基本上想要每隔x个时间在另一个目录中运行一个函数,并使其成为一个芹菜任务。我导入函数test_check并尝试将其置于名为testcheck()的celery任务下,但是,我收到错误:
在应用程序上下文之外工作
我该如何解决这个问题?这是我的设置:
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 :(得分:2)
无论test_check
是什么,它都需要请求上下文。由于Celery任务不是HTTP请求/响应周期的一部分,因此您需要手动设置请求上下文。
with app.test_request_context():
test_check()