如何像在 celery 任务中一样在 HUEY 动态周期任务中添加到期日期?

问题描述

有没有办法为 Huey Dynamic 周期性任务添加到期日期? 就像芹菜任务中有一个选项 - “some_celery_task.apply_async(args=('foo',),expires=expiry_date)” 在创建任务时添加到期日期。

我想在创建 Huey Dynamic 周期性任务时添加到期日期。我使用了“撤销”,它按预期工作,但我想在到期日期后完全停止任务而不是撤销它。当 Huey 动态周期任务被撤销时 - Huey 终端上会显示消息,提示huey 函数被撤销(每当 crontab 条件变为真)。 (我在 Django 中使用 Huey)

(额外) 我做了什么来满足这个到期日的需要 - 我创建了为 crontab 返回 Days - Months 对的函数: 例如。 开始日期 = 2021-1-20 ,结束日期 = 2021-6-14 然后函数将返回 - Days_Month :[['20-31',1],['*','2-5'],['1-14','6']] 然后我调用 Huey Dynamic 周期任务(在本例中为 3 次)。 (Days_Month 函数将根据要求返回 Day-Months - Daily、Weekly、Monthly 或在 n 天后重复)

有没有更好的方法来做到这一点? 谢谢你的帮助。

解决方法

最好的解决方案将取决于您需要这种具有特定结束日期的周期性任务的功能的频率,但理想的方法可能是涉及您的数据库。

我会创建一个数据库模型(我们称之为 Job),其中包含 end_date 的字段、一个 next_execution_date 和一个指示重复之间 interval 的字段(例如x天)。

然后,您将使用 Huey 创建一个每天运行的周期性任务(如果您需要更精细的控制,甚至可以每小时/分钟运行)。每次运行此周期性任务时,您都会检查所有 Job 实例并检查它们的 next_execution_date 是否过去。如果是这样,请启动一个新的 Huey 任务,该任务实际执行您需要在每个 Job 实例中定期执行的功能。成功后,您使用 next_execution_date 计算新的 interval

因此,无论何时您想要一个带有新 Job 的新 end_date,您都可以在 django 管理员中创建它(或为其创建一个界面),然后您将设置 next_execution_date作为您希望它执行的第一个日期。

因此,您的最终解决方案将具有 Job 模型和两个 Huey 修饰函数。一个用于仅检查是否需要执行 Job 实例并更新其 next_execution_date 的周期性任务,另一个用于实际执行每个 Job 实例的周期性功能。这样您就不必进行任何手动取消操作,您只需要 1 个周期性任务,该任务只是无限期运行,但如果没有需要运行的 Job 实例,则实际上不会执行任何操作。

注意:只有当您有多个这样的任务并且您可能想要控制界面中的 end_date 时,这才是一种合理的方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...