8

我有非常标准的 Django+Rabbitmq+Celery 设置,有 1 个 Celery 任务和 5 个工人。

任务将相同的(我简化了一点)大文件(~100MB)异步上传到许多远程 PC。

一切都以使用大量内存为代价工作正常,因为每个任务/工作人员都将那个大文件分别加载到内存中。

我想做的是有某种缓存,所有任务都可以访问,即只加载一次文件。基于 locmem 的 Django 缓存将是完美的,但就像文档所说:“每个进程都有自己的私有缓存实例”,我需要所有工作人员都可以访问这个缓存。

尝试使用#2129820中描述的 Celery 信号,但这不是我需要的。

所以问题是:有没有一种方法可以在 Celery 中定义一些全局的东西(比如基于 dict 的类,我可以在其中加载文件或 smth)。或者在这种情况下我可以使用 Django 技巧吗?

谢谢。

4

3 回答 3

2

为什么不简单地从磁盘流式传输而不是将整个文件加载到内存中?

于 2010-11-26T09:08:37.160 回答
1

在我看来,您需要的是支持 django 的 memcached。这样 Celery 中的每个任务都可以访问它。

于 2010-03-23T14:53:59.707 回答
0

也许您可以为这个特定任务使用线程而不是进程。由于线程都共享相同的内存,因此您只需要在内存中复制一份数据,但您仍然可以获得并行执行。(这意味着不使用 Celery 执行此任务)

于 2010-10-27T17:37:25.973 回答