Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: Creating a hash within a fork

by jeffa (Bishop)
on Jun 04, 2015 at 17:43 UTC ( [id://1129086]=note: print w/replies, xml ) Need Help??


in reply to Creating a hash within a fork

I do not believe that forking is going to improve the performance of this script as it appears to be very much I/O bound. Each child that is forked is reading the same file from the beginning to the end, correct? What you need instead is to be able to split the file up into chunks and have each process work on unique chunks and return the time deltas. Do you really want to complicate the process just to save a potentially small amount of time?

Oh i see now ... why don't you just output the work to STDOUT and use another script to collect the results? Seems much easier than trying to share data.

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)

Replies are listed 'Best First'.
Re^2: Creating a hash within a fork
by edimusrex (Monk) on Jun 04, 2015 at 20:07 UTC

    Yea, you're right. For a simple check it doesn't seem worth it to share data between threads. I ended up omitting the multi threading and going with a more straight forward solutions

    #!/usr/bin/perl use warnings; use strict; use POSIX qw(strftime); use Time::Piece; use Cwd qw( abs_path ); use File::Basename; use File::Basename qw( dirname ); use LWP::Simple; use Date::Calc qw (Delta_Days); my $domains = dirname(abs_path($0)).'/domains.txt'; my %domainList; my $flag = 0; my $date = strftime "%Y-%m-%d", localtime; my %month = ( 'jan'=>'01','feb'=>'02','mar'=>'03','apr'=>'04','may'=>' +05','jun'=>'06','jul'=>'07','aug'=>'08','sep'=>'09','oct'=>'10','nov' +=>'11','dec'=>'12' ); open my $fh, $domains or die "CRIT: Unable to open $domains: $!\n"; while( my $domainName = <$fh> ) { chomp $domainName; my $expDate = `jwhois -n -h whois.crsnic.net $domainName | grep Ex +piration | awk '{print \$3}'`; my $diff = &dateDiff($expDate); if ($diff < 28 and $diff > 14) { $flag = 1; } elsif ($diff <= 14) { $flag = 2; } $domainList{$domainName} = $diff; } close $fh; if ($flag == 2){ my $status = "CRIT: There are Domains Expiring Soon. Please Resol +ve"; print "$status\n"; for my $key (sort(keys(%domainList))) { print "$domainList{$key}\t +--- $key\n"; } exit 2; } elsif ($flag == 1){ my $status = "WARN: There are Domains Expiring within a month. Pl +ease Resolve"; print "$status\n"; for my $key (sort(keys(%domainList))) { print "$domainList{$key}\t +--- $key\n"; } exit 1; } else { my $status = "OK: Domains Look good"; print "$status\n"; for my $key (sort(keys(%domainList))) { print "$domainList{$key}\t +--- $key\n"; } exit 0; } sub dateDiff { my $ex = shift; chomp $ex; my($day,$mon,$year) = split("-",$ex); my ($tyear,$tmon,$tday) = split("-",$date); my $remaining_days = Delta_Days($tyear, $tmon, $tday, $year, $mont +h{$mon}, $day); return $remaining_days; }

    Thanks

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1129086]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (6)
As of 2024-04-24 09:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found