私は50,000以上のエントリを持つ非常に大きなハッシュハッシュを持っています。私は時間の制約のためにこのマルチスレッドを処理したい。Perl - マルチスレッド処理時にハッシュをデキューします
dequeue()を呼び出すたびに、完全なハッシュではなく、ハッシュから次の項目を返すことは可能ですか?すべての項目が処理されるまで別のスレッドがハッシュから別の項目をデキューしながら、私のスレッドで
flintstones => {
old_address => "0x1231234a",
new_address => "0x1234234d",
source => "sym"
},
私がすることができ、その後のプロセス:例では、私はちょうどを返すためにデキューを()したいの下に。下の私のコード例。
問題がないストレージフォーマット(HoH)を変更する必要がある場合。多分ハッシュの配列がうまくいくでしょうか?任意のヘルプ/ポインタが高く評価されました。
use strict;
use warnings;
use threads;
use Thread::Queue;
use Data::Dumper;
my %hoh = (
flintstones => {
old_address => "0x1231234a",
new_address => "0x1234234d",
source => "sym"
},
jetsons => {
old_address => "0x12712343",
new_address => "0x12142344",
source => "sym"
},
simpsons => {
old_address => "0x12f12347",
new_address => "0x12a42348",
source => "dwarf"
},
);
my $href = \%hoh;
my $queue= Thread::Queue->new($href);
my $t = threads->create('start_sub');
my $result = $t->join;
sub start_sub {
print "items on queue = " . $queue->pending() . "\n";
while($queue->pending()) {
my $item = $queue->dequeue_nb();
#
## dequeue_nb returns undef when queue empty
if($item) {
print "Doing work in thread " . threads->tid() . " on:\n";
print Dumper($item);
print "Done =====================\n"
}
}
}
私は '私の$キュー=スレッド:: Queue->新しい(キー%のHOH)でこれを解決したと思います;'。基本的には、ハッシュのキーをキューにロードしてから、各スレッドは個々のアイテムで作業できます。 – Chris