Thread Wie kann man eine Batch mit Hilfe von system() parallel aufrufen?? (9 answers)
Opened by crojay at 2011-09-23 15:16

Astralkeks
 2013-06-14 15:03
#168212 #168212
User since
2012-07-17
40 Artikel
BenutzerIn
[default_avatar]
Ist zwar schon ein alter Thread, aber das gleiche Thema:
Ich möchte > 4000 Hosts parallel anpingen. Daher gab ich dem ForkManager eine Chance.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl -w
use strict;
use Parallel::ForkManager;

my $hosts2ping       = "hosts2ping.txt";
                                    
my @addresses = ();

open (SRC, "<$hosts2ping");
while (<SRC>) {
  chomp $_;
  push (@addresses, $_);
}

my $pm = new Parallel::ForkManager(10); 
foreach my $host (@addresses) {
  $pm->start and next;
  system("ping -n 1 -4 $host > c:\\tmp\\$host");
  $pm->finish; 
}
$pm->wait_all_children;

Ich lese eine Datei mit Hostnamen in ein Array und pinge jeden Eintrag an.
Problem: Ich erhalte den Fehler

The process cannot access the file because it is being used by another process.

in unregelmäßiger Häufigkeit. Je mehr parallele Aktionen, umso häufiger die Meldung. Anfangs bei einer Anzahl von 30 parallelen pings waren es über 40 Fehler, bei 10 parallelen pings immer noch 8 Fehler.
Anzahl der Hosts knapp über 4300.

Ist Windows 2008 R2 mit strawberry perl 5.16.3.
Ich hätte jetzt erwartet, dass sogar Windows ein paar parallele Befehle hinbekommt, oder wo liegt der Fehler? Jemand eine Idee?

View full thread Wie kann man eine Batch mit Hilfe von system() parallel aufrufen??