costanza has asked for the wisdom of the Perl Monks concerning the following question:
I have a CSV file with a large list of domains and need to do DNS lookups against it. The input file is like this:
1,host1.foo.bar 2,host2.foo.bar n,hostn.foo.bar
I basically need to check if the domains are resolvable - with a 1 second timeout per DNS lookup and a list of 50,000 domains, this can take quite a while. I haven't used Perl threads before but think this would be a good candidate for it. Here is my code:
my $dns = new Net::DNS::Resolver; $dns->tcp_timeout( 1 ); $dns->udp_timeout( 1 ); my $my_file = $ARGV[0]; open(INFILE, $my_file) || die ("I refuse to open your file!"); my @my_data=<INFILE>; close(INFILE); foreach my $line(@my_data) { ## Parse the file chop($line); my ($number,$domain)=split(/,/,$line); testDns($number,$domain,$dns); } sub testDns { my ($line_number, $domain_to_test, $default_resolver) = @_; my $ns = $default_resolver->query( $domain_to_test, 'NS' ); if ($ns) { foreach my $rr ($ns->answer) { if ($rr->type eq "NS") { my @auth_nameservers = $rr->nsdname; foreach my $auth_nameserver (@auth_nameservers) { print "$line_number,$domain_to_test,$auth_nameserv +er\n"; } } } else { print "$line_number,$domain_to_test,error\n"; } }
How can I implement multiple threads in the above code?
Thanks, George
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Multithreaded processing of a CSV file
by Corion (Patriarch) on May 13, 2015 at 07:02 UTC | |
|
Re: Multithreaded processing of a CSV file
by afoken (Chancellor) on May 13, 2015 at 07:04 UTC | |
|
Re: Multithreaded processing of a CSV file
by QM (Parson) on May 13, 2015 at 08:42 UTC | |
|
Re: Multithreaded processing of a CSV file
by costanza (Initiate) on May 13, 2015 at 16:41 UTC |