【问题标题】:Is ActiveRecord table_name thread safe?ActiveRecord table_name 线程安全吗?
【发布时间】:2013-12-14 11:05:24
【问题描述】:

我有一个多线程 Rails 应用程序(使用 Sidekiq),并且在每个线程中我将 SomeModel 的 table_name 设置为不同的表名

例子:

Thread 1:
SomeModel.table_name = "temp_table1"

Thread 2:
SomeModel.table_name = "temp_table2"

这是线程安全的吗?

换句话说,如果我在线程 1 中将其设置为“temp_table1”,那么线程 2 或其他线程是否仍然可以看到此更改,还是仅适用于线程 1?

我正在使用原版 Ruby。

【问题讨论】:

  • 核磁共振?杰鲁比?讨厌吗?此外,您不应该这样做。从不。
  • 我正在使用香草 Ruby。不是 JRuby。

标签: ruby-on-rails ruby multithreading activerecord


【解决方案1】:

在 MRI 中设置变量是线程安全的。更新线程 1 的值后,所有其他线程将看到相同的值。

【讨论】:

  • 实际上在我的场景中,我不希望为所有其他线程更改 table_name :(
  • 那么你不想这样做。手动运行查询,尝试修补 table_name 来做你想做的事情不是一个好选择。
猜你喜欢
  • 1970-01-01
  • 2020-04-15
  • 2011-04-15
  • 2011-07-04
  • 2014-04-26
  • 2012-11-30
  • 2010-12-30
  • 2013-03-12
  • 2021-08-03
相关资源
最近更新 更多