我们正在使用多个任务,所有这些任务都在CELERYBEAT_SCHEDULE中定义,如下所示:
CELERYBEAT_SCHEDULE = {
'runs-every-5-minutes': {
'task': 'tasks.webhook',
'schedule': crontab(minute='*/5'),
'args': (WEBHOOK_BASE + '/task/refillordernumberbuffer', {'refill_count': 1000})
},
'send-sameday-delivery-confirmation': {
'task': 'tasks.webhook',
'schedule': crontab(minute='*/2'),
'args': (WEBHOOK_BASE + '/task/sendsamedaydeliveryconfirmation', {})
},
'send-customer-hotspot-notifications': {
'task': 'tasks.webhook',
'schedule': crontab(hour=9, minute=0),
'args': (WEBHOOK_BASE + '/task/sendcustomerhotspotnotifications', {})
},
}
这不是全部,但它们都是这样的。所有这些实际上都是PHP脚本,不了解整个芹菜概念。它们只是执行某些操作的脚本,并在必要时发送通知。完成后,他们只是吐出一个JSON响应,上面写着 success = true 。
据我所知,芹菜只是用来定期执行它们。除了我的代码片段中的最后一个,我们没有任何问题。该任务/脚本发送电子邮件,通常为5到10,但有时甚至更多。这就是问题开始的地方,因为(当我在celery events
中观察时,我可以诚实地在任何地方的文档中找不到任何确认),当PHP脚本的成功JSOn响应没有在3分钟内到达,芹菜重试任务,脚本再次发送大量电子邮件。而且,因为只有少量电子邮件从初始运行的任务中保存为“完成”。这通常导致4或5次重试,直到最后足够的电子邮件被先前的重试标记为“成功发送”,最后重试在此神秘的3分钟限制下完成。
我的问题:
time_limit
和soft_time_limit
的内容,但我在配置中尝试的任何内容似乎都没有帮助。如果这是解决方案,我将需要协助如何正确应用设置。感谢您提供任何帮助,如果我发现任何不清楚的事情,我很抱歉 - 很高兴回答任何后续问题并在必要时提供更多详细信息。
配置文件的其余部分如下:
## Broker settings.
databases = parse_databases_xml()
settings = parse_custom_settings_xml()
BROKER_URL = 'redis://' + databases['taskqueue']['host'] + '/' + databases['taskqueue']['dbname']
# List of modules to import when celery starts.
CELERY_IMPORTS = ("tasks", )
## Using the database to store task state and results.
CELERY_RESULT_BACKEND = BROKER_URL
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ANNOTATIONS = {
"*": {"rate_limit": "100/m"},
"ping": {"rate_limit": "100/m"},
}
在任何地方都没有time_limit,所以我认为我们不是自己设置它。我省略了python导入和从我们的config xml文件中读取的函数,因为这些东西都运行正常,只是涉及一些数据库身份验证数据。