我正在研究一个django应用程序,它从dropbox读取csv文件,解析数据并将其存储在数据库中。为此,我需要后台任务,检查文件是否被修改或更改(更新),然后更新数据库。
我已经尝试过芹菜'但无法用django配置它。然后我找到 django-background-tasks ,它比芹菜配置起来要简单得多。
我的问题是如何初始化重复任务?
它在documentation中描述
但是我找不到任何解释如何使用重复, repeat_until 或文档中提到的其他常量的示例。
谁能解释下面的例子吗?
notify_user(user.id, repeat=<number of seconds>, repeat_until=<datetime or None>)
重复在几秒钟内给出。提供以下常量: Task.NEVER(默认),Task.HOURLY,Task.DAILY,Task.WEEKLY, Task.EVERY_2_WEEKS,Task.EVERY_4_WEEKS。
答案 0 :(得分:2)
例如,假设您拥有文档中的功能
@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)
答案 1 :(得分:1)
当你真的需要执行它时,你必须调用特定的函数(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.请求到达网址,因此它会发送到相应的视图,这里myview()
2.超过行get_csv(creds, repeat=100)
,然后在DB中创建async task
(它现在不会超出功能)
3.将HTTP响应返回给用户。
在创建任务的60秒后,get_csv(creds)
将在每个100 seconds