我的应用程序需要每秒运行一次定期任务(检查标志的任务)。但有时似乎任务未在预期的1秒钟内执行。所以我将其更改为以0.1秒的时间执行。即任务每秒检查一次标志10次。
CELERY_BEAT_SCHEDULE = {
'task-number-one': {
'task': 'app.tasks.periodic_runner',
'schedule': 0.1,
'args': [],
'relative': True
},
'task-number-two': {
'task': 'app.tasks.periodic_assigner',
'schedule': 0.1,
'args': [],
'relative': True
}
}
优缺点是什么? 每次执行该任务都会命中数据库。
我有五个这样的任务。
从长远来看,它是否会以任何方式破坏我的服务器?
答案 0 :(得分:1)
这实际上取决于其他情况。要确定您的应用程序是否可以扩展以支持许多任务,需要进行一些计算。通过以100ms的间隔运行这些命令,我们正在执行
每秒10个任务* 60秒/分钟* 60分钟/小时=每小时36,000个任务。这意味着我们每小时要对代理进行36,000次I / O操作,对结果后端进行72,000次I / O操作,并且对数据库进行n * 36,000次调用,其中n是每个任务的数据库调用数。在进行其他所有操作以及在体系结构中部署的资源后,这些数字中的任何一个构成问题吗?
例如,假设您的数据库是mongodb数据库,并且您的任务正在请求有关未索引字段的信息。然后,是的,这么多请求可能会锁定mongodb。但是,如果您在AWS中使用redis和mysql,并且每个实例都有8GB实例作为后盾,那么您应该能够轻松应对所有这些情况。