通知Django运行任务

时间:2019-01-16 21:00:21

标签: django task

我做了一个管理命令,可以从一个csv文件中填充我的一个模型。
我需要经常进行此更新,并且csv文件有成千上万行。
有时可能需要10分钟以上才能完成填充。

我想添加一个功能,使我可以直接通过网站上传csv文件,并且在文件上传后,django应该运行该命令或至少运行其中的逻辑,然后填充数据库。

我将如何处理?我希望能够在上传文件后离开页面,并在任务完成后收到电子邮件。

2 个答案:

答案 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应用中异步运行任务。

在生产中,您可能想run celery as a daemon process with celeryd