0

有没有办法将到期日期添加到 Huey Dynamic 定期任务? 就像 celery 任务中有一个选项 - "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 天后重复)

有一个更好的方法吗? 感谢您的帮助。

4

1 回答 1

0

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

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

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

因此,每当您想要一个Job带有 new 的 newend_date时,您只需在 django admin 中创建它(或为其创建一个界面),然后将它设置next_execution_date为您希望它执行的第一个日期。

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

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

于 2021-01-03T14:20:06.683 回答