Leser: 4
|< 1 2 3 4 5 6 >| | 51 Einträge, 6 Seiten |
1
2
3
my $thread1 = $thread->create(sub { print "I am a thread1"},$variable1);
my $thread2 = $thread->create(sub { print "I am a thread2"},$variable2);
QuoteDass da zwei unterschiedliche Funktionsnamen stehen wird ein Flüchtigkeitsfehler gewesen sein.
1
2
3
4
5
6
if($pid == 0){
&abfrage($die_ersten_~100_zeilen); # child prozess muesste das sein, oder?
}
else{
&abfrage($die_naechsten_~100_zeilen); # parentprozess muesste das sein, oder?
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
use Thread; #... sub verarbeite_10_zeilen_in_thread($) { return Thread->new(\&verarbeite_10_zeilen,$_[0]); } sub verarbeite_10_zeilen($) { my @zeilen=@$_[0]; # mach hier was du willst return("irgendwas", 42); } my @threads; my @ten_lines; my $cnt=0; open(DAT,'<',$datei) or die $!; while(my $line=<DAT>) { push(@ten_lines,$line); $cnt++; if($cnt>=10) { $cnt=0; push(@threads,&verarbeite_10_zeilen_in_thread([@ten_lines])); @ten_lines=(); } } # übrig geblibenen Zeilen verarbeiten push(@threads,&verarbeite_10_zeilen_in_thread([@ten_lines])); if(@ten_lines>0); close(DAT); my @back; push(@back,[$thread->join()]) for my $thread (@threads); mach irgendwas mit den zurückgebenen Werten in @back ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#! /usr/bin/env perl
use strict;
use warnings;
use Getopt::Long;
use POSIX ":sys_wait_h";
GetOptions('-i=s' => \my $infile);
my ($counter,$index,@lines) = (1,0);
open my $fh,"<",$infile or die "Can't open $infile: $!";
while(my $line = <$fh>){
push @{$lines[$index]},$line;
$index++ if $counter++ % 10 == 0;
}
fork_it(\@lines);
#------------------------------------------#
# Subroutines #
#------------------------------------------#
sub do_something_with_lines{
my ($lines,$nr) = @_;
print $nr,": ",$_ for @$lines;
}
sub fork_it{
my ($linesref) = @_;
my %pids;
for (1..scalar(@$linesref)){
my $pid=fork();
if($pid==-1){
warn($!);
last;
}
if($pid){
$pids{$pid}=1;
}
else{
do_something_with_lines($linesref->[$_-1],$_-1);
exit(0);
}
}
while(keys %pids){
my $pid=waitpid( -1, WNOHANG );
die "$!" if $pid == -1;
delete $pids{$pid};
}
}
|< 1 2 3 4 5 6 >| | 51 Einträge, 6 Seiten |