RubyのParallelというgemをブロック引数で呼び出すようにしており、
Parallelのブロック変数nを呼び出し元で使用するには、
nをグローバル変数$nにする必要があります。
しかし、(おそらくParalleの仕様かなと思うのですが)
ブロック引数内での処理が大きくなったり、繰り返し数が大きくなってくると、
$nとnの数値にズレが生じてきます。(他にも色々トラブルが生じます)
ruby
1require 'parallel' 2 3def parallel 4 Parallel.map([1,2,3,4,5,6,7,8,9,10], in_threads: 3) do |n| 5 $n = n 6 yield 7 end 8end 9 10parallel do 11 p $n 12 # ここにオリジナルの処理を書いていく 13end 14
def parallel内だけで、nを使用する分には、
問題は起きていません。
何か代替案などはありますでしょうか?
$nを使用すると、かなり色々なトラブルが発生します。
・タイムアウト
・Stream Closed
・$nとnのズレ
・初回の処理が実行されない
・can't modify string; temporarily locked
などなど
再現性がとりにくく、なかなか掴みにくい症状ばかりで、
$nが原因だと究明をしていくのに2週間かかってしまいました。
回答1件
あなたの回答
tips
プレビュー