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

如何解决如何像在 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 时,这才是一种合理的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?