django - 具有长期计划任务的 Django + Celery
问题描述
我正在开发一个 Django 应用程序,它严重依赖 Celery 任务调度,使用 Redis 作为后端。任务可以设置为在很长一段时间内运行,也可以在几秒/分钟内运行。
我已经阅读了 Redis 可见性超时和调度任务的结果,timedelta 大于可见性超时(我也在以前的项目中处理它),所以我很感兴趣,如果有什么比我的解决方案更整洁,即在需要执行“主”任务前 5 分钟运行另一个“辅助”任务,安排“主”任务在所需时间运行,将任务 ID 存储在 DB 中,然后检查“主”任务,如果存储的任务 ID 是正在运行的任务 ID。最后一部分(存储任务 ID)是必需的,因为多次运行“帮助”任务可能会产生大量“主”任务实例,但使用这种方法,每个任务都会有不同的任务 ID。
我真的很讨厌这种方法听起来如何以及它是如何工作的,好像任务计划从当前时间开始一个月运行,“帮助”和“主要”任务执行多达一百次。
我也知道这是一个悬而未决的问题,所以我对更简洁的解决方法感兴趣,而不是解决方案本身。
解决方案
在测试了可用选项后,我认为仅使用RabbitMQ
作为经纪人可以解决整个问题。
虽然它对我来说是一个可行的选择,但缺少一些redis
配置参数(例如池大小)使得它对于那些使用托管服务的人无法使用,并且对打开的代理连接有一定的限制。
推荐阅读
- bots - discordjs 只从特定频道读取消息
- python-3.x - 如何循环浏览 DynamoDB 表中的项目?
- angular - Angular 7:检测位置时出现 405 错误
- c++ - 为什么以下 C++ 代码中存在内存泄漏?
- python - 如何在图像分类pytorch中提前停止
- c# - 使用 azure ad 在两个 .NET Core 应用程序和 .NET Framework 应用程序不同应用程序池相同域之间共享会话 - IDX20804 错误
- parsing - 如何让 Visual Studio Code 也解析非活动代码?
- azure-keyvault - 为了安全合规性,为密钥保管库创建 Azure 策略,其中访问权限应仅授予 AD 组,而不是个人用户
- laravel-5.8 - 如何在 locahost 中将 laravel 项目从我的计算机运行到另一台计算机?
- css - 背景图像悬停时的线性渐变