【发布时间】:2014-12-18 21:11:07
【问题描述】:
我有一个控制器,它分拆 6 个 sidekiq 线程,以更快地并行处理大文件。然而,在此之前,我想为这些线程提供一些变量,这些变量应该在所有线程中都可用,因为它们本身的变量是相当占用内存的。 (它只是从中读取,而不是写入,因此不存在并发问题)
换句话说,我的控制器看起来像这样
def foo
$bar1 = ....
$bar2 = ...
worker.perform_async()...
worker2.perform_async()...
end
我不想将这些全局变量放入 perform 方法中,因为将它们序列化到 redis 会阻塞整个过程。我的问题是工作人员看不到这些变量并因为无方法错误而死亡(即尝试在其中调用 .first 会给出该错误,因为 var 对于工作人员来说是 nil)。
怎么会?有没有其他方法可以做到这一点不会杀死我的记忆? (即我不想用 6x 相同的大数组占用大部分内存)
【问题讨论】:
-
这些变量的本质是什么?它们包含什么样的数据?
-
它们包含大量散列,其中包含几个整数和字符串,这是 Active Record 集合、group_by 预先调用的结果
标签: ruby-on-rails ruby multithreading sidekiq