2013-12-14 4 views
1

내가 다중 스레드 레일 응용 프로그램이 (Sidekiq를 사용하여), 그리고 것은 내가 다른 테이블 이름에 SomeModel에 대한 TABLE_NAME을 설정하고 각 스레드에ActiveRecord table_name은 스레드로부터 안전합니까?

예 :

Thread 1: 
SomeModel.table_name = "temp_table1" 

Thread 2: 
SomeModel.table_name = "temp_table2" 

이 스레드는 안전한가요 ?

즉, 스레드 1에서 "temp_table1"로 설정하면 스레드 2 또는 다른 스레드에서이 변경 사항을 볼 수 있습니까? 아니면 스레드 1에만 적용 가능합니까?

바닐라 루비를 사용하고 있습니다.

+0

MRI? JRuby? 루비니 어스? 또한, ** 이렇게하지 않아야합니다. 못. –

+0

바닐라 루비를 사용하고 있습니다. JRuby가 아닙니다. –

답변

0

MRI의 변수 설정은 스레드로부터 안전합니다. 스레드 1에서 값을 업데이트하면 모두 다른 스레드는이 동일한 값을 볼 수 있습니다.

+0

실제로 시나리오에서는 다른 모든 스레드에 대해 table_name을 변경하지 않으려 고합니다. ( –

+0

다음에 수동으로 쿼리를 실행하고 원숭이 패치'table_name'을 실행하여 원하는 작업을 수행하십시오 좋은 옵션이 아닙니다. –

관련 문제