1

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

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

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

4

1 回答 1

3

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

celery -A videoprocessor worker

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

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

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

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

于 2012-11-09T11:17:31.467 回答