Django Celery的处理器密集型任务

时间:2012-11-09 00:54:25

标签: django celery django-celery

让我们假设,仅仅为了一个例子,我有一个用于处理视频的Django Web应用程序,我想使用芹菜来卸载其中的一些任务。如果我在Celery中有一个任务,例如视频编辑,那是非常耗费处理器的,我不想在运行Django的同一台服务器上运行它。有没有办法将您在Django应用程序中定义的任务发送到另一台服务器上远程运行?

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

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

1 个答案:

答案 0 :(得分:3)

Celery开箱即可完成远程任务执行。假设您有一个带有芹菜工作者的python模块,用于处理您的视频内容,称为 videoprocessor.py 。您将它放在远程计算机上并在那里启动该工作人员:

celery -A videoprocessor worker

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

您也将该模块放在Web服务器计算机上,但您在那里启动它。但是,在这样的地方,它可以通过Web服务器计算机上的主脚本导入,一个名为client.py的脚本用于参数。此外,它以与远程计算机上完全相同的名称导入,例如以“MyPackage.videoprocessor”开头的内容。

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

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