向django发出运行任务的信号

向django发出运行任务的信号,django,task,Django,Task,我发出了一个管理命令,从csv文件填充我的一个模型。 我需要非常频繁地进行此更新,csv文件有成千上万行。 有时,完成填充可能需要10分钟以上 我想添加一个功能,让我可以通过网站直接上传csv文件,上传文件后,django应该运行该命令,或者至少运行其中的逻辑,并填充数据库 我该怎么办?我希望能够在上传文件后离开页面,并在任务完成后收到电子邮件。使用 Rougly,它可能看起来像这样: app = Celery(<config stuff here>) @app.task(name

我发出了一个管理命令,从csv文件填充我的一个模型。
我需要非常频繁地进行此更新,csv文件有成千上万行。
有时,完成填充可能需要10分钟以上

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

我该怎么办?我希望能够在上传文件后离开页面,并在任务完成后收到电子邮件。

使用

Rougly,它可能看起来像这样:

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')
app=芹菜()
@app.task(name='my_task')
定义我的任务(自我):
做某事
定义我的视图(*args,**kwargs):
结果=处理请求()
应用程序发送任务(“我的任务”)
你需要创建任务,用芹菜注册它(你可以使用一些自动发现魔法),然后从django应用程序异步运行任务

在生产过程中,您可能希望

您也可以这样做。它是Django的一个基于数据库的工作队列。而且比芹菜更容易实现

from background_task import background
@background(schedule=60)
def your_task():
    # do your cool work here.

这将把
您的_任务
转换为后台任务功能。当您从常规代码调用它时,它实际上会创建一个任务对象并将其存储在数据库中。

我对此也很感兴趣。这正是芹菜的用途。