我的 django 芹菜应用程序有问题。假设我有两个相关的模型 - 交易和账户。我正在通过我的 API 推送事务。我想要实现的是计算指定帐户的余额。
我有一个计算余额的芹菜任务。问题是我每个帐户都需要一个计时器,设置为 eg。60秒。当同一帐户的交易即将到来时,计时器再次设置为 60。我想这样做,因为我不想多次运行相同的任务。当指定帐户的交易在 60 秒内没有发生时,则应执行任务。
任何架构建议如何实现这一目标?事实上,我只是不知道如何设置这些"计时器"。
感谢您的回答!
你可以遵循 django-celery-transactions 的 aproach。它们对Task
类进行子类化,以便自定义执行逻辑。
对于您的情况,您应该自定义apply_async
以检查在接下来的 60 秒内是否有排队的任务要执行(为此,您将使用 Celery API 来检查工作人员)。如果已经存在计划任务,则可以忽略当前任务的执行;如果没有,请将将来的执行时间设置为 60 秒,并调用 super().apply_async(...)
方法。