【问题标题】:Schedule file download in Django在 Django 中安排文件下载
【发布时间】:2020-08-01 17:52:58
【问题描述】:

我如何命令 Django App 每天检查文件(在链接中)并在满足某些条件时下载它。假设,在伪代码中:

every 24h
access link
if filename differs from the name of the existing file (e.g. previously downloaded)  OR there's no such a file 
download file
else skip

我很乐意提供最简单的解决方案。也许是教程? 谢谢!

PS 我希望将它实现到 django 应用中,所以请不要建议使用 cron

【问题讨论】:

  • 两个答案都很好并且有效。另一个非常相似的选项是 python-rq(.org),可能通过 django-rq。

标签: python python-3.x django web web-scraping


【解决方案1】:

这是我的问题的解决方案 - 希望对其他人有所帮助!

首先 - 根据文档 (https://django-background-tasks.readthedocs.io/en/latest/) fi 安装 django-background-tasks 并将其添加到 settings.py 中的 INSTALLED_APPS。然后进行数据库迁移。

现在,主要步骤 - 在应用程序的文件夹中,我在放置函数时创建了 tasks.py,并使用装饰器继续它(在我的问题中是 @background(schedule=10)。然后,函数调用在 @987654327 中设置@ ! 这很关键,因为将其插入 settings.py 会导致 PRIVATE_KEY 出现一些问题。

最后,python manage.py process_taskspython manage.py runserver 等等。它确实有效。

【讨论】:

    【解决方案2】:

    您可以使用 Django 包Celery 来执行计划任务。

    按照文档并使用“celery beat”,您可以设置周期性任务。

    您的情况如下:

    from celery.schedules import crontab
    
    app.conf.beat_schedule = {
        # Executes every day at midnight
        'run-every-day': {
            'task': 'tasks.add',
            'schedule': crontab(minute=0, hour=0),
        },
    }
    

    【讨论】:

      【解决方案3】:

      你可以用芹菜。但是,如果你想要更简单的东西,django-background-tasks 是最简单的选择。 https://django-background-tasks.readthedocs.io/en/latest/.

      就这么简单:

      在你的函数中添加装饰器

      @background
      def your_function(..) //all logic resides here
      

      调用函数:此代码位于您需要启动函数调用的位置(可能在创建某个对象之后?,或者如果它必须在没有任何条件的情况下启动,则在 settings.py 中。

      your_function(....,repeat=TASK.DAILY, repeat_until=<datetime or None>) 
      

      【讨论】:

      • 最简单的选择正是我正在寻找的。那么将其插入 settings.py 将在服务器启动时启动功能?
      • 很好,但是我有一个问题!根据网站 (django-background-tasks.readthedocs.io/en/latest),我将 background_task 添加到 INSTALLED_APPS,执行迁移,在我的应用目录中创建了一个文件 tasks.py,我在其中放置了一个带有 @background(schedule=60) 装饰器的函数。在设置中,我通过 from app.tasks import scheduledJob... 导入它,但随后服务器无法启动!出错 - django.core.exceptions.ImproperlyConfigured: SECRET_KEY 设置不能为空。 - 虽然它不是空的。
      • 我认为这是一个循环依赖。不要创建tasks.py。将函数放在 settings.py 本身中。
      • 我一开始就是这么做的。尽管如此,还是会出现以下问题:“django.core.exceptions.AppRegistryNotReady:尚未加载应用程序。”
      • 您是否尝试将您的函数和调用放在 INSTALLED_APPS 之后?
      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      相关资源
      最近更新 更多