解决我的Apply.async任务的预计到达时间的正确方法?

时间:2018-10-08 23:18:55

标签: python django datetime scheduled-tasks djcelery

那么一点点背景知识。我试图让我的任务在应交付订单的同时运行。假设订单是下周,我希望任务在交货日期前两天(48小时)运行。除非订单在48小时内到期。我试图弄清楚这是否是写的好方法。

我首先创建交货日期的eta

eta = timezone.make_aware(
    datetime.datetime.combine(
        buyer_invoice.purchase_order.deliver_date,time(hour=22)
    ),
    timezone.get_current_timezone()
)

eta = eta + timedelta(days=1)`

为下订单创建协调时间。

reconcile_time = timezone.make_aware(
    datetime.datetime.combine(
        buyer_invoice.purchase_order.delivery_date,
        time(hour=RECONCILE_AT_HRS)
    ),
    timezone.get_current_timezone()
)

并设置一个现在点。

now = timezone.now()

要弥补过去的任何订单,

if now > reconcile_time:
    reconcile_time = now + timedelta(minutes=5)
if now > eta:
    eta= now + timedelta(minutes= 5)

这是我到目前为止的工作。现在,我已经添加了下一部分,以根据需要进行调整。

if eta < timedelta(hours = 48) 
    do_reconcile = reconcile_time
else:
    do_reconcile = eta - timedelta(days = 2)

完成我的任务

task_id_reconcile= uuid()
buyer_invoice.auto_reconcile_task = auto_reconcilation.apply_async(
    args=[buyer_invoice, task_id_reconcile],
    eta=do_reconcile + timedelta(minutes=1),
    task_id=task_id_reconcile
)


task_id_inv_reconcile = uuid()
buyer_invoice.inventory_reconcile_task = inventory_reconcile.apply_async(
    args=[buyer_invoice, task_id_inv_reconcile],
    eta=do_reconcile,
    task_id=task_id_inv_reconcile
)

由于这是我正在做的一项非常敏感的任务,所以我希望我能写一些见解。任何有益的意见将不胜感激。

编辑:我正在尝试在Shell中对此进行测试,但我不断得到:

  

django.core.exceptions.ImproperlyConfigured:请求设置CACHES,但未配置设置。在访问设置之前,您必须定义环境变量DJANGO_SETTINGS_MODULE或调用settings.configure()。

所以我也在努力弄清楚。

0 个答案:

没有答案