如何使用 Django 后台任务初始化重复任务?

How to initialize repeating tasks using Django Background Tasks?

我正在开发一个 django 应用程序,它从 dropbox 读取 csv 文件,解析数据并将其存储在数据库中。为此,我需要后台任务来检查文件是否被修改或更改(更新),然后更新数据库。 我试过 'Celery' 但未能使用 django 配置它。然后我发现 django-background-tasks 这比 celery 的配置要简单得多。 我的问题是如何初始化重复任务?
它在 documentation 中描述 但我找不到任何示例来解释如何使用 repeatrepeat_until 或文档中提到的其他常量。
谁能用例子解释以下内容?

notify_user(user.id, repeat=<number of seconds>, repeat_until=<datetime or None>)


repeat is given in seconds. The following constants are provided: Task.NEVER (default), Task.HOURLY, Task.DAILY, Task.WEEKLY, Task.EVERY_2_WEEKS, Task.EVERY_4_WEEKS.

例如,假设您有文档中的函数

@background(schedule=60)
def notify_user(user_id):
    # lookup user by id and send them a message
    user = User.objects.get(pk=user_id)
    user.email_user('Here is a notification', 'You have been notified')

假设你想重复这个任务每天直到2019年元旦你会做以下事情

import datetime
new_years_2019 = datetime.datetime(2019, 01, 01)
notify_user(some_id, repeat=task.DAILY, repeat_until=new_years_2019)

您必须在真正需要执行时调用特定函数 (notify_user())。
假设你需要在请求到达服务器时执行任务,那么它会是这样的,

@background(schedule=60)
def get_csv(creds):
    #read csv from drop box with credentials, "creds"
    #then update the DB

def myview(request):
    # do something with my view
    get_csv(creds, repeat=100)
    return SomeHttpResponse


执行程序
1. 请求到达 url 因此它将分派到相应的视图,这里是 myview()
2. Excetes行get_csv(creds, repeat=100)然后在DB中创建一个async task(现在不会excetute函数)
3. 返回HTTP响应给用户。

任务创建后 60 秒后,get_csv(creds) 将在每个 100 seconds

中重复执行