Django中所有Celery worker / memory缓存中的全局可访问对象

时间:2010-03-23 14:47:06

标签: python django caching global-variables celery

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

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

所有工作正常,但代价是使用大量内存,因为每个任务/工作人员都会将大文件单独加载到内存中。

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

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

所以问题是:有没有办法可以在Celery中定义全局内容(就像基于dict的类,我可以在其中加载文件或smth)。或者在这种情况下我可以使用Django技巧吗?

感谢。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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