【问题标题】:Signal django to run a task信号 django 运行任务
【发布时间】:2019-06-11 00:37:33
【问题描述】:

我创建了一个管理命令,该命令从 csv 文件填充我的一个模型。
我需要非常频繁地进行此更新,并且 csv 文件有数万行。
有时可能需要 10 多分钟才能完成填充。

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

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

【问题讨论】:

  • 我也对此感兴趣。
  • 这正是 Celery 的用途。

标签: django task


【解决方案1】:

您可以对Django Background Task 执行相同的操作。它是 Django 的数据库支持的工作队列。并且比 Celery 容易实现。

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

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

【讨论】:

    【解决方案2】:

    使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 2014-03-17
      • 2023-03-24
      • 2022-10-12
      • 2022-01-01
      • 2022-11-14
      • 1970-01-01
      相关资源
      最近更新 更多