芹菜任务已安排但未在 ETA 执行
celery task scheduled but not executed at ETA
我的芹菜配置如下:
# create context tasks in celery
celery = Celery(
__name__,
# redis
backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL'],
include=['app.celery_tasks.tasks']
)
celery.conf.timezone = 'US/Pacific'
celery.conf.broker_transport_options = {'visibility_timeout': 3600*24}
celery.conf.task_routes = {
'tasks.periodic': {
'queue': 'periodic',
'routing_key': 'tasks.periodic'
},
'tasks.generate_report': {
'queue': 'report',
'routing_key': 'tasks.generate_report'
}
}
然后我使用这个辅助方法来获取我所有报告任务的预计到达时间
def get_eta_time(time_d=8):
tz = timezone('US/Pacific')
ct = datetime.now(tz=tz)
eta = ct + timedelta(hours=time_d)
return eta
我遇到的事情是我可以看到任务是使用 celery 控件安排的,但是当 eta 到达时它们没有执行。但是,当我尝试重新启动我的 celery worker 时,这些任务立即得到执行。我的芹菜配置中有什么遗漏吗?
我的任务触发如下:
eta = get_eta_time()
generate_report.apply_async(args=(log_location, repetition_count+1), queue='report', eta=eta)
我的期刊队列按预期工作,但我的报告队列对我来说没有任何意义。
原来是一些硬件问题。我切换到另一台机器,它现在可以正常工作了。
我的芹菜配置如下:
# create context tasks in celery
celery = Celery(
__name__,
# redis
backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL'],
include=['app.celery_tasks.tasks']
)
celery.conf.timezone = 'US/Pacific'
celery.conf.broker_transport_options = {'visibility_timeout': 3600*24}
celery.conf.task_routes = {
'tasks.periodic': {
'queue': 'periodic',
'routing_key': 'tasks.periodic'
},
'tasks.generate_report': {
'queue': 'report',
'routing_key': 'tasks.generate_report'
}
}
然后我使用这个辅助方法来获取我所有报告任务的预计到达时间
def get_eta_time(time_d=8):
tz = timezone('US/Pacific')
ct = datetime.now(tz=tz)
eta = ct + timedelta(hours=time_d)
return eta
我遇到的事情是我可以看到任务是使用 celery 控件安排的,但是当 eta 到达时它们没有执行。但是,当我尝试重新启动我的 celery worker 时,这些任务立即得到执行。我的芹菜配置中有什么遗漏吗?
我的任务触发如下:
eta = get_eta_time()
generate_report.apply_async(args=(log_location, repetition_count+1), queue='report', eta=eta)
我的期刊队列按预期工作,但我的报告队列对我来说没有任何意义。
原来是一些硬件问题。我切换到另一台机器,它现在可以正常工作了。