File: sample1.pl

package info (click to toggle)
libproc-queue-perl 1.23-1.1
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 108 kB
  • sloc: perl: 569; makefile: 2
file content (101 lines) | stat: -rwxr-xr-x 2,151 bytes parent folder | download | duplicates (2)
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/local/bin/perl -w

use Proc::Queue size => 4, debug => 1, trace => 1, delay => 0.3, ':all';

foreach (1..10) {
  my $f=fork;
  if(defined ($f) and $f==0) {
    print "-- I'm a forked process $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n";
    exit(0)
  }
}

1 while wait != -1;

Proc::Queue::size(10); # changing limit to 10 concurrent processes
Proc::Queue::trace(1); # trace mode on
Proc::Queue::debug(0); # debug is off
Proc::Queue::delay(0); # no delay between fork calls

package other; # just to test it works in any package

print "\n-- Going again!\n";

foreach (1..20) {
  my $f=fork;
  if(defined ($f) and $f==0) {
    print "-- I'm a forked process $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n";
    exit(0)
  }
}

1 while wait != -1;


package another;

print "\n-- Another try!\n";

Proc::Queue::size(2);
Proc::Queue::debug(1);

use Proc::Queue ':all';

my $all_ok=all_exit_ok
  Proc::Queue::run_back {
    print "Hello, I'm running back $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n";
  },
  run_back {
    print "Hello, I'm also running back $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n"
  },
  run_back {
    print "Hello, I'm running back $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n";
  },
  run_back {
    print "Hello, I'm also running back $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n"
  };



print "-- all_exit_ok return $all_ok\n";


print "\n-- And the last one!\n";

my $all_ok2=all_exit_ok
  run_back {
    print "Hello, I'm running back $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n";
  },
  run_back {
    print "Hello, I'm also running back $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n";
    $?=1; # I'm going to fail
  },
  run_back {
    print "Hello, I'm running back $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n";
    exit(1); # I'm going to fail too
  },
  run_back {
    print "Hello, I'm also running back $$\n";
    sleep rand 5;
    print "-- I'm tired, going away $$\n"
  };

print "-- all_exit_ok return $all_ok2\n";