在0.1秒内安排芹菜节拍周期任务的利弊是什么?

时间:2019-01-25 06:16:48

标签: python django python-3.x celery celerybeat

我的应用程序需要每秒运行一次定期任务(检查标志的任务)。但有时似乎任务未在预期的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
    }
}

优缺点是什么? 每次执行该任务都会命中数据库。

我有五个这样的任务。

从长远来看,它是否会以任何方式破坏我的服务器?

1 个答案:

答案 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实例作为后盾,那么您应该能够轻松应对所有这些情况。