我做了一个管理命令,可以从一个csv文件中填充我的一个模型。
我需要经常进行此更新,并且csv文件有成千上万行。
有时可能需要10分钟以上才能完成填充。
我想添加一个功能,使我可以直接通过网站上传csv文件,并且在文件上传后,django应该运行该命令或至少运行其中的逻辑,然后填充数据库。
我将如何处理?我希望能够在上传文件后离开页面,并在任务完成后收到电子邮件。
答案 0 :(得分:2)
您可以对Django Background Task执行相同的操作。它是Django的数据库支持的工作队列。并且比Celery易于实施。
from background_task import background
@background(schedule=60)
def your_task():
# do your cool work here.
这会将your_task
转换为后台任务功能。当您从常规代码调用它时,它将实际上创建一个Task对象并将其存储在数据库中。
答案 1 :(得分:1)
使用Celery
看起来很粗糙:
app = Celery(<config stuff here>)
@app.task(name='my_task')
def my_task(self):
do_stuff()
def my_view(*args, **kwargs):
result = process_request()
app.send_task('my_task')
您将需要创建任务,将其注册到celery(可以使用一些自动发现的魔术),然后从Django应用中异步运行任务。