Jump to content
Vhaerun

Module perl facute de noi

Recommended Posts

Am avut nevoie zilele trecute sa explic la cineva cum functioneaza fork si threaduri , pentru a pune ceva sa se execute in fundal , si respectivul nu a inteles :)

Asa ca am facut un modul perl ( nu prea ma ocup cu ele ,de aceea calitatea s-ar putea sa nu fie chiar punctul forte , dar e functionabil ) , care sa ii dea posibilitatea sa execute subrutine in fundal .


package ObjectTasking;

$SIG{ALRM}=sub {
die "timeout";
};

sub new {

my $class=shift;
my $func=shift;
my $args=shift;
my $self={};
$self->{FUNC}=$func;
$self->{ARGS}=$args;
bless($self,$class);
return $self;

}

sub func {
my $self=shift;
my @args=@{ shift @_ };
&{ $self->{FUNC} }(@args);
}

sub multi_task_timer {

my $self=shift;
my $timer=shift;
eval {
my $pid=fork();
alarm $timer;
if($pid) {
$self->func($self->{ARGS});
exit;
}
else {
waitpid($pid,0);
alarm 0;
}
};
if($@=~/timeout/i) {
return "exited";
}
}

sub multi_task {
my $self=shift;
my $pid=fork();
if($pid) {
$self->func($self->{ARGS});
exit;
}
else {
waitpid($pid,0);
}
}

1;

pentru cei care au experienta in perl , codul ar trebui sa fie destul de usor de inteles . pentru ceilalti pun un exemplu :


use strict;
use warnings;
use ObjectTasking;


my $task=ObjectTasking->new(\&test,["test1"]);
my $result=$task->multi_task_timer(2);
print "here\n";
sleep(1);
if($result eq "exited") {
print "Functia a fost intrerupta\n";
}

sub test {

my @param=@_;
print "@param\n";
sleep(20);
print "sfarsitul functiei\n";

}

E un quick hack pentru cei care nu stiu folosi fork/alarm/threads .

Parametrii unui obiect ObjectTasking sunt referinta spre functie si parametrii ei . Pentru o executie completa se utilizeaza metoda multi_task , pentru a executa functia doar un anumit numar de secunde se utilizeaza metoda multi_task_timer , cu numarul de secunde dupa care executia functiei va fi intrerupta .

Ar fi util sa punem ceva module scrise de noi , care sa usureze din munca zilnica . Ce ziceti ?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...