2012-03-05 45 views
7

我想在我的工作者节点(例如,缓存的授权令牌,统计信息,......)之间共享芹菜中的小块信息。在一台机器上共享芹菜工作者之间的内存区域

如果我在我的任务文件中创建一个全局的,每个工作者都是唯一的(我的工作人员是进程并且有一个任务/执行的生命周期)。

最佳做法是什么? 我应该保存外部状态(DB),创建一个老式的共享内存(由于芹菜中不同的池实现可能会很困难)?

在此先感谢!

+1

像memcached这样的缓存或像Redis这样的键值存储怎么样? – demalexx 2012-03-05 11:40:01

+0

这将是一种方式,但我希望我能找到一种没有附加依赖的方式。 – Gregor 2012-03-05 11:42:38

+0

它很小的依赖性,但它会解决您可能遇到的实现自己的进程间通信的一些问题。 – demalexx 2012-03-05 13:17:13

回答

7

我终于找到了一个体面的解决方案 - 核心蟒蛇多-经理:

from multiprocessing import Manager 
manag = Manager() 
serviceLock = manag.Lock() 
serviceStatusDict = manag.dict() 

该字典可以从每一道工序进行访问,它是同步的,但你必须同时访问它时(如在使用锁每隔一个共享内存实现)。

+0

嗨格里高,我很乐意对你面对的这个问题发表意见: http://stackoverflow.com/questions/26088868/asynchronous-task-queue-processing-of-in-memory-data-在django结构 您认为您的解决方案适合我的问题吗? 非常感谢 – cyberjoac 2014-09-29 03:51:04

+0

嗨cyberjoac,一般来说这可以工作,但如果Django和Celery生活在同一个进程组(我怀疑),你需要尝试一下。让我知道它是否有效,我感兴趣! – Gregor 2014-10-03 11:10:21

+1

你在哪里启动这个管理器? – 2014-12-23 09:53:46

相关问题