0

で同じ時間に実行されません両方とも異なるキューで実行され、yamlファイルは次のようになります。Sidekiqジョブは、私は2人のSidekiqの労働者を持って異なるキュー

--- 
:queues: 
    - foo 
    - bar 

development: 
    :concurrency: 5 

Sidekiq UIのBusyページに問題があり、どちらも実際にファイルを作成して内容を入れることになります。Sidekiqをマルチスレッドにする必要はありませんか?

更新:

  • これは私が同僚のプロジェクトをクローン化し、彼のsidekiqを実行して取り組んでいる
  • 新しいと同じレールを使用して新しいプロジェクトを作成した私のマシン
  • にのみ発生します!!!
  • 私はサイドキックバージョンを使用しましたが、動作しません!

新しいアップデート:(10回の睡眠で何かをするように)私は、有限ループで2つのジョブを実行する場合、彼は私のプロジェクト

  • のクローンを作成する場合

    • これは私の同僚のマシン上でも起こり、最初のジョブが実行され、2番目のジョブが実行されますが、2番目のジョブが終了して再び開始されると、両方とも予想どおりに動作します。github.com/ArayB/sidekiq-testからプロジェクトをクローンしたすべてのユーザーが問題に遭遇しました。
  • +0

    あなたと同僚のマシンの違いは何ですか?オペレーティングシステム? – mudasobwa

    +0

    MacOSの両方。私は、複数のケースをテストする限り、アップデートのリストを更新します。 –

    +0

    更新プログラムをテストできますか? –

    答えて

    0

    これはSidekiqでは問題ありません。これはRuby/MRI/Thread/GILのどこかの問題です。 Googleの詳細については、私の理解は、スレッドが実際のスレッドではないことがあります(「グリーンスレッド」を参照)ので、実際にはスレッドをシミュレートします。重要なことは、スレッドが1度に実行できることだけです。

    2つのスレッドでは、システムが2番目のスレッドに時間を与えていないのは興味深いことです。理由は分かりませんが、再度実行すると間違いだと認識しなければなりません。

    興味深いことに、あなたが同じアプリケーションを実行する代わりに、10個のTestWorkersを起動して、その違いを知ることができるように出力を調整してください。sidekiqは10個すべてを一度に実行します。

    10.times {|i| TestWorker.perform_async(i) } 
    

    ここには調整された作業者があります。現実を反映しないスレッド化とTTYバッファリングの問題を引き起こす可能性のある出力原因をフラッシュしてください。

    class TestWorker 
        include Sidekiq::Worker 
    
         def perform(n) 
         10.times do |i| 
          puts "#{n} - #{i} - #{Time.current}" 
          $stdout.flush 
          sleep 1 
         end 
         end 
        end 
    

    いくつかの興味深いリンク:

    +0

    GILとスレッドに関する良い記事:https://medium.com/@zanker/ruby-vm-and-how-apps-break-パート-81a309384f39 –

    関連する問題