Thread View: pl.comp.lang.perl
6 messages
6 total messages
Started by Pawel
Mon, 01 Nov 2010 19:04
Równoległe uruchamianie dwóch procesów
Author: Pawel
Date: Mon, 01 Nov 2010 19:04
Date: Mon, 01 Nov 2010 19:04
35 lines
2345 bytes
2345 bytes
Witam wszystkich Mam w tablicy zapisane sciezki dostepu do katalogow, ktore maja byc przetwarzane. Chcialem zrobic cos takiego exec1(tablica[0]); exec2(tablica[1]); Teraz chcialem zrobic cos takiego, ze jak skonczy sie przetwarzac katalog w exec1, to trzeci katalog ma byc przetwarzany w exec1, chyba, ze wczesniej sie skonczy przetwarzac exec2, to wtedy trzeci katalog ma sie przetwarzac w exec2 itd. Probowalem to robic tak, ze stworzylem sobie osobny skrypt w perlu, ktory zajmuje sie tylko przetwarzaniem katalogu(wywolywany jest tyle razy, ile jest katalogow), a glowny skrypt zajmuje sie tylko przydzielaniem katalogow do tego drugiego skryptu. Problem jest w tym, ze nie bardzo wiem, jak zrobic, zeby uruchomic rownolegle te procesy. Probowalem exec i system, ale to wyglada, jakby drugi skrypt sie nie uruchamial, przynajmniej nic nie widze na konsoli, ani nie zapisuje nic do pliku(pliki wynikowe maja inne nazwy, wiec niema obawy, ze jeden nadpisuje drugi skrypt). Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork robi kopie procesu glownego, a nie uruchamia osobnego skryptu. Nie jestem specem od progamowania wspolbieznego(w perlu takze juz nie programowalel spory kawalek czasu), a chcialem zrobic to na dwa procesy, gdyz mam procka 2-rdzeniowego i chcialem wykorzystac jego mozliwosci. Jak mozna to zrobic? Macie pomysl? Pozdrawiam PAweł
Re: Równoległe uruchamianie dwóch procesów
Author: Waldek M.
Date: Mon, 01 Nov 2010 19:22
Date: Mon, 01 Nov 2010 19:22
8 lines
1061 bytes
1061 bytes
> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork robi > kopie procesu glownego, a nie uruchamia osobnego skryptu. Owszem, dlatego stosuje się najczęściej fork+exec. Poza tym, myślę, że wystarczyłyby Ci wątki. Pozdrawiam, Waldek
Re: Równoległe uruchamianie dwóch procesów
Author: Pawel
Date: Mon, 01 Nov 2010 19:31
Date: Mon, 01 Nov 2010 19:31
13 lines
1673 bytes
1673 bytes
On 2010-11-01 20:22, Waldek M. wrote: >> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork >> robi kopie procesu glownego, a nie uruchamia osobnego skryptu. > > Owszem, dlatego stosuje się najczęściej fork+exec. A moglbys dac jakis przyklad kodu, bo nie bardzo wiem jak sie do tego zabrac. > Poza tym, myślę, że wystarczyłyby Ci wątki. A czy da sie w pelni wykorzystac moc dwoch rdzeni przy uzyciu watkow? bo jak np pakuje cos przy uzyciu 7z uzywajac watkow, to CPU nie jest w pelni wykorzystywany, przynajmniej do takich wnioskow doszedlem, patrzac na menedzera zadan.
Re: Równoległe uruchamianie dwóch procesów
Author: Szymon Sokół
Date: Tue, 02 Nov 2010 16:54
Date: Tue, 02 Nov 2010 16:54
22 lines
2162 bytes
2162 bytes
On Mon, 01 Nov 2010 20:31:40 +0100, Pawel wrote: > On 2010-11-01 20:22, Waldek M. wrote: >>> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork >>> robi kopie procesu glownego, a nie uruchamia osobnego skryptu. >> >> Owszem, dlatego stosuje się najczęściej fork+exec. > A moglbys dac jakis przyklad kodu, bo nie bardzo wiem jak sie do tego > zabrac. Przykładów są tysiące (wystarczy w Google wpisać "perl fork exec example"...), np. tu: http://www.wellho.net/resources/ex.php4?item=p223/f1.pl albo i w FAQ tej grupy: http://www.kt.agh.edu.pl/perl-faq/Uruchamianie#20 ale pewnie prościej będzie to wystrugać za pomocą modułu IPC::Run. -- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
Re: Równoległe uruchamianie dwóch procesów
Author: neo77
Date: Wed, 03 Nov 2010 10:18
Date: Wed, 03 Nov 2010 10:18
49 lines
3220 bytes
3220 bytes
On 2 Lis, 17:54, Szymon Sokół <szy...@bastard.operator.from.hell.pl>
wrote:
> On Mon, 01 Nov 2010 20:31:40 +0100, Pawel wrote:
> > On 2010-11-01 20:22, Waldek M. wrote:
> >>> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork
> >>> robi kopie procesu glownego, a nie uruchamia osobnego skryptu.
>
> >> Owszem, dlatego stosuje się najczęściej fork+exec.
> > A moglbys dac jakis przyklad kodu, bo nie bardzo wiem jak sie do tego
> > zabrac.
>
> Przykładów są tysiące (wystarczy w Google wpisać "perl fork exec
> example"...), np. tu:http://www.wellho.net/resources/ex.php4?item=p223/f1.pl
> albo i w FAQ tej grupy:http://www.kt.agh.edu.pl/perl-faq/Uruchamianie#20
> ale pewnie prościej będzie to wystrugać za pomocą modułu IPC::Run.
>
> --
> Szymon Sokół (SS316-RIPE) -- Network Manager B
> Computer Center, AGH - University of Science and Technology, Cracow, Poland Ohttp://home.agh.edu.pl/szymon/PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F
> Free speech includes the right not to listen, if not interested -- Heinlein H
sub forker {
my $pid = fork;
if (my $pid) { # $pid > 0 => parent
return; # czy co tam innego
ma robic parent
} elsif (defined $pid) { # $pid == 0 => child
system(...);
exit 0;
} else {
# $pid not defined => error podczas forkowania..
}
}
no a teraz wystarczy tylko kontrolowac ilosc uruchamianych procesow,
ale to juz prosta sprawa
forker for (1 .. $MAX_PROC-1);
while (forker) {
waitpid(-1, 0); # czekaj az dowolne dziecko sie skonczy
}
# czekanie na reszte niedobitkow
my $p=-1;
waitpid(-1, 0) while $p != -1;
pozdrawiam
neo77
Re: Równoległe uruchamianie dwóch procesów
Author: neo77
Date: Wed, 03 Nov 2010 10:39
Date: Wed, 03 Nov 2010 10:39
60 lines
3594 bytes
3594 bytes
On 3 Lis, 11:18, neo77 <ne...@panth-net.com> wrote:
> On 2 Lis, 17:54, Szymon Sokół <szy...@bastard.operator.from.hell.pl>
> wrote:
>
>
>
>
>
> > On Mon, 01 Nov 2010 20:31:40 +0100, Pawel wrote:
> > > On 2010-11-01 20:22, Waldek M. wrote:
> > >>> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork
> > >>> robi kopie procesu glownego, a nie uruchamia osobnego skryptu.
>
> > >> Owszem, dlatego stosuje się najczęściej fork+exec.
> > > A moglbys dac jakis przyklad kodu, bo nie bardzo wiem jak sie do tego
> > > zabrac.
>
> > Przykładów są tysiące (wystarczy w Google wpisać "perl fork exec
> > example"...), np. tu:http://www.wellho.net/resources/ex.php4?item=p223/f1.pl
> > albo i w FAQ tej grupy:http://www.kt.agh.edu.pl/perl-faq/Uruchamianie#20
> > ale pewnie prościej będzie to wystrugać za pomocą modułu IPC::Run.
>
> > --
> > Szymon Sokół (SS316-RIPE) -- Network Manager B
> > Computer Center, AGH - University of Science and Technology, Cracow, Poland Ohttp://home.agh.edu.pl/szymon/PGPkey id: RSA: 0x2ABE016B, DSS: 0xF9289982 F
> > Free speech includes the right not to listen, if not interested -- Heinlein H
>
> sub forker {
> my $pid = fork;
> if (my $pid) { # $pid > 0 => parent
> return; # czy co tam innego
> ma robic parent
> } elsif (defined $pid) { # $pid == 0 => child
> system(...);
> exit 0;
> } else {
> # $pid not defined => error podczas forkowania..
> }
>
> }
>
> no a teraz wystarczy tylko kontrolowac ilosc uruchamianych procesow,
> ale to juz prosta sprawa
>
> forker for (1 .. $MAX_PROC-1);
> while (forker) {
> waitpid(-1, 0); # czekaj az dowolne dziecko sie skonczy
>
> }
>
> # czekanie na reszte niedobitkow
> my $p=-1;
> waitpid(-1, 0) while $p != -1;
>
> pozdrawiam
> neo77
rzecz jasna:
# czekanie na reszte niedobitkow
while (waitpid(-1, 0) != -1) { }
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads