首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用django后台任务调度任务在后台运行

如何使用django后台任务调度任务在后台运行
EN

Stack Overflow用户
提问于 2019-05-12 07:26:36
回答 1查看 528关注 0票数 0

我设置了一个后台任务"date_check“,但它不是每天运行。我不知道我在设置中哪里出了问题。当我试图运行TypeError: date_check() missing 1 required positional argument: 'self'时,我还得到了“python manage.py process_tasks”错误。

这是我的model.py:

代码语言:javascript
复制
...
    @background(schedule=5)
    def date_check(self):
        """Will be used as a background task to make sure trips that have ended don't hog van availability."""
        today = datetime.date.today()
        name = self.van_used
        if today > self.trip_start and today > self.trip_end:
            vans.objects.filter(vanName = name).update(available = True)

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        self.date_check(repeat=Task.DAILY)

更新:

我试着从函数参数中删除self,但仍然没有效果。我现在得到了错误的TypeError: date_check() missing 3 required positional arguments: 'van_used', 'trip_start', and 'trip_end'。以下是更新的代码:

代码语言:javascript
复制
    @background(schedule=5)
    def date_check(van_used, trip_start, trip_end):
        """Will be used as a background task to make sure trips that have ended don't hog van availability."""
        today = datetime.date.today()
        name = van_used
        if today > trip_start and today > trip_end:
            vans.objects.filter(vanName = name).update(available = True)

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        self.date_check(self.van_used, self.trip_start, self.trip_end, repeat=Task.DAILY)
EN

回答 1

Stack Overflow用户

发布于 2020-09-01 08:06:35

为了实际运行函数,它(当然)需要参数。但是,在您的代码中并没有真正调用它的位置(因为它是计划好的),这意味着代码中并没有真正可以传递参数的位置。这也是威廉在他的回答中所指的,当他提到这是一个“独立的”,你不能自己称呼它。因为python不知道该传递什么,而是被要求给vars,所以它会抛出一个异常。

答案是:找到一种方法来检索函数中的参数。让签名免费。我猜你原来的帖子中的“自我”是一个"Van"-object,所以你会得到这样的信息:

代码语言:javascript
复制
    def date_check():
    """Will be used as a background task to make sure trips that have ended don't hog van availability."""
    van = vans.objects.all() # or some appropriate filter
    today = datetime.date.today()
    for v in van:
        name = van.van_used
        if today > van.trip_start and today > van.trip_end:
            vans.objects.filter(vanName = name).update(available = True)

没有一种方法可以让背景任务单独在所有货车上执行(至少我不知道),但这应该会给您带来相同的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56097062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档