スレッドを効果的に管理する方法に関する質問をここに投稿しました。スレッドを適切に使用してURLにpingを接続するにはどうすればよいですか?
プール、スレッドセーフ、および使用するライブラリとgemに関するいくつかの優れた推奨事項とヒントを入手しました。いくつかのスレッドを実行するためのスレッド/接続プールを作成するためにconcurrent-rubyを使用して、リストされている推奨事項の1つを実行しようとしています。単純なrubyファイルに次のコードがあります。
pool = Concurrent::FixedThreadPool.new(5)
pool.post do
puts 'hello'
end
コンカレントルビーのドキュメントに従って、必要な手順を実行しましたが、コードが実行されません。putsステートメントは実行されていません。別の例を次に示します。
pool = Concurrent::FixedThreadPool.new(5)
array = []
pool.post do
array << 1
puts 'Why am I not working?'
end
puts array.size
この配列のサイズは0です。プール内のコードは実行されていません。私は少なくとも1のサイズを期待していました。私はTシャツの例に従いました。このコードが実行されないのはなぜですか?
コードは正しく、ブロックは正常にプールにプッシュされます。ただし、実行される前に、プログラムは終了してプールを強制終了します。そのため、出力が表示されません。ジョブを実行するのに十分な時間がありませんでした。
sleep
最後にステートメントを追加するか、より洗練された解決策として、すべての作業を終了してシャットダウンするようにプールに指示することができます。これは次のようになります。
require 'concurrent-ruby'
pool = Concurrent::FixedThreadPool.new(5)
pool.post do
puts 'hello'
end
pool.shutdown
pool.wait_for_termination
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加