However, before it continues to the next line in the file, it needs to make a single simple database commit to SQLite based on in-memory values - nothing new needs to be computed.
I am running Perl 5.8.8 under Cygwin.
My goal is to take advantage of the fact that this machine has two CPUs - it is an Intel Centrino Duo. I want the database commit to happen on the second CPU while the machine goes ahead and reads the next line.
What sort of module or function would be best for this purpose?
while (<I>) { my $line = $_; my @bucket = $bucket->based_on($line); # Data::Bucket my @acct_vals; for (@bucket) { # %hash = calculate based on input and bucket value push @acct_vals, \%hash; } next unless @acct_vals; @acct_vals = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, $_->{dist} ] } @acct_vals; # write $acct_vals[0] and $line out to file # ** Help needed ** # write out to SQLite but without holding up # next loop iteration my @dump ; for my $acct_val (@acct_vals) { last if $acct_val->{dist} > $match_threshold * 1.5 ; push @dump, $acct_val; } my $d = Data::Dumper->new([\@dump], ['dump']) ; $d->Purity(1)->Terse(1)->Deepcopy(1); # DBIx::Simple by Juerd Waalboer $dbs->query('INSERT INTO addresses VALUES (??)', $acct_name, $clean_acct_name, $d->Dump); # *** end Help Needed unless (++$counter % $report_very) { warn "$counter in $now"; # Time::Lapse by Scott Godin } }
In reply to Taking advantage of dual processors [tag://parallel,cygwin,multi-core,fork,i/o] by metaperl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |