【问题标题】:Processor Intensive Task For Django CeleryDjango Celery 的处理器密集型任务
【发布时间】:2012-10-29 07:52:21
【问题描述】:

假设,仅作为示例,我有一个用于处理视频的 Django Web 应用程序,我想使用 celery 来卸载其中的一些任务。如果我在 Celery 中有一个任务,例如视频编辑,那是处理器密集型的,我不想在运行 Django 的同一台服务器上运行它。有没有办法将您在 Django 应用程序中定义的任务发送到另一台服务器上远程运行?

我刚刚阅读了有关 Celery 的所有文档,但没有看到这种情况。似乎适合这种情况的唯一方法是在其他地方运行 Celery 并使用 Celery HTTP 网关向它发出 HTTP 请求。

对于 django-celery,任务在哪里执行?您在哪里设置代理 URL 或在运行 django 的机器上?

【问题讨论】:

    标签: django celery django-celery


    【解决方案1】:

    Celery 开箱即用地执行远程任务。假设你有一个 python 模块,其中有一个 celery worker 来处理你的视频,称为 videoprocessor.py。你把它放在你的远程计算机上并在那里启动那个工人:

    celery -A videoprocessor worker
    

    (如果你想从命令行运行它)

    您也将该模块放置在网络服务器机器上,但您确实在那里启动它。然而,它位于这样一个位置,它可以由您的 Web 服务器计算机上的主脚本导入,该脚本称为 client.py 以进行论证。此外,它以与远程计算机上完全相同的名称导入,例如以“MyPackage.videoprocessor”开头。

    现在,当 Web 服务器上的主脚本 client.py 导入您的 videoprocessor.py 模块时,它会从该模块中的工作程序中创建一个 签名。此签名对远程计算机上的 videoprocessor.py 也有效。而且由于那个正在运行,而服务器机器上的 videoprocessor.py 没有运行,所以每次都会使用远程工作人员。

    确保远程机器上的工作人员使用与 Web 服务器机器上的客户端脚本相同的后端。这可能是 Redis 或 RabbitMQ 或其他东西,您至少需要指定 IP 号,可能更多(数据库、端口),具体取决于您的设置。

    【讨论】:

      猜你喜欢
      • 2013-10-16
      • 2018-06-03
      • 2020-06-16
      • 1970-01-01
      • 2013-08-23
      • 2018-08-13
      • 2013-09-09
      • 2015-10-03
      • 2012-06-06
      相关资源
      最近更新 更多