如何使用 Django 后台任务初始化重复任务?
How to initialize repeating tasks using Django Background Tasks?
我正在开发一个 django 应用程序,它从 dropbox 读取 csv 文件,解析数据并将其存储在数据库中。为此,我需要后台任务来检查文件是否被修改或更改(更新),然后更新数据库。
我试过 'Celery' 但未能使用 django 配置它。然后我发现 django-background-tasks 这比 celery 的配置要简单得多。
我的问题是如何初始化重复任务?
它在 documentation 中描述
但我找不到任何示例来解释如何使用 repeat、repeat_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
中重复执行
我正在开发一个 django 应用程序,它从 dropbox 读取 csv 文件,解析数据并将其存储在数据库中。为此,我需要后台任务来检查文件是否被修改或更改(更新),然后更新数据库。
我试过 'Celery' 但未能使用 django 配置它。然后我发现 django-background-tasks 这比 celery 的配置要简单得多。
我的问题是如何初始化重复任务?
它在 documentation 中描述
但我找不到任何示例来解释如何使用 repeat、repeat_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