2012-11-09 40 views
1

让我们假设,仅仅为了举例,我有一个用于处理视频的Django web应用程序,我想用芹菜来卸载其中的一些任务。如果我在Celery中有一个任务,比如视频编辑,那么这个任务对于处理器密集程度非常高,我不想在运行Django的服务器上运行它。有没有办法将您在Django应用程序中定义的任务发送到另一台服务器上远程运行?Django Celery处理器强化任务

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

对于django-celery执行任务的位置?你在哪里设置你的代理网址,或者在运行django的机器上?

回答

3

芹菜远程执行开箱即用任务。假设你有一个python模块,里面有一个芹菜工作人员在做你的视频资料,叫做videoprocessor.py。你把你的远程计算机上,并启动工作者有:

celery -A videoprocessor worker 

(如果你想在命令行中运行它)

也放置在Web服务器机器上的模块,但你不是从那里开始。但是,它可以通过Web服务器主机上的主脚本导入,这是一个名为client.py的脚本,用于说明问题。此外,它以与远程机器完全相同的名称导入,以“MyPackage.videoprocessor”开头。

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

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

相关问题