2017-03-02 20 views
0

Rails 5.0.1、Ruby 2.4.0、Sidekiq 4.2.9sidekiqスレッド間で変数を共有

バックグラウンドジョブでは、特定のデータをいくつかカウントする必要があります。私はPostgresで既に実装していましたが、問題に直面しました。サイドキーの並行処理でDB接続が非常に負荷がかかります。同時実行数を減らすと、実行時間が長くなります。

私はそれがアトミックカウンターを使用することが可能ですし、いくつかの期間でDBになり、セーブことがわかりました。

は、だから私はSidekiq内のスレッド間で変数を共有することができますか?そうであれば、どのように私は共有変数を初期化する必要がありますか?任意のための

おかげで、あなたがスレッド間で変数を共有している場合、あなたはミューテックスでそれをロックを心配する必要があり、それが唯一の単一のプロセスにスケール

+0

、あなたが実際にsidekiqジョブ間で共有したい情報のビットを詳しく説明することはできますか? –

+0

は、私はいくつかのデータの数を格納する必要があり、このカウントが制限値を得るとき、私は仕事を無視して、あなたは 'Thread.get_thread_variable'を使用することができます –

+0

の処理を停止する必要がありますが、あなたがSidekiqを実行する場合にのみ動作します単一のマシン(そして1つのプロセス)で – Anthony

答えて

0

をお勧めします。

代わりに、Redisのカウンタをインクリメントするコマンドを使用します。

https://redis.io/commands/incr

+0

だから、Mutexを使うのは悪い考えです。右? –

+0

サイドキックがあなたに与える利益は、マルチスレッドです。 –

+0

ミューテックスを使うのは悪い考えだとは言いませんでした。私はそれもいいアイデアだとは言いませんでした。 –

関連する問題