我的django芹菜应用有问题。我们假设我有两个相关的模型 - 交易和账户。我正在通过我的API推动交易。我想要实现的是计算指定帐户的余额。
我有芹菜任务来计算余额。问题是我需要为每个帐户设置一个计时器,例如设置为。 60秒当同一帐户的交易即将到来时,计时器再次设置为60。我想这样做,因为我不想多次运行相同的任务。当指定帐户的交易不会持续60秒时,则应执行任务。
任何建筑建议如何实现这一目标?事实上,我只是不知道如何设置这些“计时器”。
感谢您的回答!
答案 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
方法调用。