ruby-on-rails - Sidekiq 线程访问全局变量

标签 ruby-on-rails ruby multithreading sidekiq

我有一个 Controller 可以分离出 6 个 sidekiq 线程,以便更快地并行处理大文件。然而,在此之前,我想为这些线程提供一些变量,这些变量应该在所有线程中可用,因为它们变量本身是相当内存密集型的。 (只是从那里读取,没有写入,所以并发问题不存在)

换句话说,我的 Controller 看起来像这样

def foo
  $bar1 = ....
  $bar2 = ...
  worker.perform_async()...
  worker2.perform_async()...
end

我不想将这些全局变量放入执行方法中,因为将它们序列化到 Redis 会阻塞整个过程。我的问题是工作人员看不到这些变量并因为无方法错误而死亡(即尝试调用 .first 对它们给出该错误,因为工作人员的 var 为 nil)。

怎么会?有没有其他方法可以做到这一点而不会破坏我的内存? (即我不想用 6 倍的相同大数组占用大部分内存)

最佳答案

Sidekiq 在单独的进程上运行,因此它不与 worker 的发起者共享相同的内存。

如果数据是静态的,您可能希望在 sidekiq 进程启动时加载它(可能在您配置 sidekiq 服务器时)。

如果它根据任务而改变,你应该以一种可以创建全局存储库来保存它的方式对其进行建模(如果 redis 不适合这个,也许你可以尝试 memcached )...

关于ruby-on-rails - Sidekiq 线程访问全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27547319/

相关文章:

ruby - 使用 Watir 保存屏幕截图时,png 为空或 0kb

java - Android Runnable 不会重复

java - 如何配置 spring 来执行重叠的 fixedRate 任务?

java - 创建一个从 MySQL 返回值并在异步线程中进行查询的方法

ruby-on-rails - Spotify 回调 URI 错误

ruby-on-rails - 从belongs_to动态查找父对象

ruby - chef -- 将属性散列传递给资源

ruby - 基本元编程 : extending an existing class using a module?

ruby-on-rails - Rails-输入类型="file"倍数

ruby-on-rails - 升级到 Rails 5 问题 - 现有应用程序