django芹菜PeriodicTask和eta字段



我有一个与芹菜相结合的django项目,我的需求是能够在未来的某个时刻动态调度任务,无论是否重复。我需要删除/编辑已经安排的任务的能力

因此,为了在一开始实现这一点,我开始使用带有DatabaseScheduler的django-celey将一些PeriodicTasks(过期)存储到数据库中,正如这里或多或少描述的那样

通过这种方式,如果我关闭我的应用程序并重新启动它,我的时间表仍然存在

但我的问题仍然存在,因为我无法利用eta并在未来的某个时候安排任务。是否可以以某种方式使用eta动态调度任务?

我的第二个问题是,我是否可以安排一个一次性任务,比如安排它在2015-05-15 15:50:00运行(这就是我尝试使用eta的原因)

最后,我将安排数千个通知,芹菜节拍能够处理这么多安排的任务吗?其中一些是一次性的,而另一些是周期性的?还是我必须使用更高级的解决方案,如APScheduler

感谢

我昨天也遇到了同样的问题。我丑陋的临时解决方案是:

# tasks.py    
from djcelery.models import PeriodicTask, IntervalSchedule
from datetime import timedelta, datetime
from django.utils.timezone import now
...
@app.task
def schedule_periodic_task(task='app.tasks.task', task_args=[], task_kwargs={},
                           interval=(1, 'minute'), expires=now()+timedelta(days=365*100)):
    PeriodicTask.objects.filter(name=task+str(task_args)+str(task_kwargs)).delete()
    task = PeriodicTask.objects.create(
        name=task+str(task_args)+str(task_kwargs), task=task,
        args=str(task_args),
        kwargs=str(task_kwargs),
        interval=IntervalSchedule.objects.get_or_create(
            every=interval[0],
            period=interval[1])[0],
        expires=expires,
    )
    task.save()

所以,如果你想用eta安排周期性任务,你应该使用

# anywhere.py    
schedule_periodic_task.apply_async(
    kwargs={'task': 'grabber.tasks.grab_events',
            'task_args': [instance.xbet_id], 'task_kwargs': {},
            'interval': (10, 'seconds'),
            'expires': instance.start + timedelta(hours=3)},
    eta=instance.start,
)

使用eta调度任务,创建周期性任务。丑陋:

  1. 处理raw.task.name
  2. 奇异周期(n,"间隔")

如果你设计了一些漂亮的解决方案,请告诉我。

相关内容

  • 没有找到相关文章

最新更新