Django Celery应用程序与计时器

时间:2016-04-22 11:48:27

标签: django celery django-celery

我的django芹菜应用有问题。我们假设我有两个相关的模型 - 交易和账户。我正在通过我的API推动交易。我想要实现的是计算指定帐户的余额。

我有芹菜任务来计算余额。问题是我需要为每个帐户设置一个计时器,例如设置为。 60秒当同一帐户的交易即将到来时,计时器再次设置为60。我想这样做,因为我不想多次运行相同的任务。当指定帐户的交易不会持续60秒时,则应执行任务。

任何建筑建议如何实现这一目标?事实上,我只是不知道如何设置这些“计时器”。

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

您可以遵循django-celery-transactions的方法。他们subclass the Task class为了定制执行逻辑。

对于您的情况,您应该自定义public class TypeDescriptionContext : ITypeDescriptorContext { private Control editingObject; private PropertyDescriptor editingProperty; public TypeDescriptionContext(Control obj, PropertyDescriptor property) { editingObject = obj; editingProperty = property; } public IContainer Container { get { return editingObject.Container; } } public object Instance { get { return editingObject; } } public void OnComponentChanged() { } public bool OnComponentChanging() { return true; } public PropertyDescriptor PropertyDescriptor { get { return editingProperty; } } public object GetService(Type serviceType) { return editingObject.Site.GetService(serviceType); } } 以检查在接下来的60秒内是否有要执行的排队任务(为此您将使用Celery API for inspecting workers)。如果已存在计划任务,则可以忽略当前任务的执行;如果没有,请在将来设置60秒的执行时间,并使用apply_async方法调用。