我的应用程序要求每秒运行定期任务(检查标志的任务)。但有时任务似乎没有在预期的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
}
}
利弊是什么?此任务每次执行时都会访问数据库。
我有五项这样的任务。
从长远来看,它会以任何方式破坏我的服务器吗?
这实际上取决于其他情况。决定应用程序是否能够扩展以支持这么多任务需要一些后台计算。通过以100ms的间隔运行这些程序,我们正在执行
每秒10个任务*60秒/分钟*60分钟/小时=每小时36000个任务。这意味着我们每小时对代理进行36000次i/o操作,对结果后端进行72000次i/o操作以及对数据库进行n*36000次调用,其中n是每个任务的数据库调用次数。考虑到您正在进行的其他一切,以及您在体系结构中部署的资源,这些数字中的任何一个都会带来问题吗?
例如,假设您的数据库是mongodb数据库,并且您的任务是请求关于未编制索引的字段的信息。那么,是的,这么多请求可能会锁定mongodb。但是,如果你在AWS中使用redis和mysql,每个都有8GB的实例支持,你应该能够毫不费力地处理所有这些。