Schrift
[thread]6418[/thread]

Zeitgesteuerte abarbeitung



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Gast Gast
 2004-07-20 21:00
#84665 #84665
Hallo zusammen,
Ich möchte zu Testzwecken ein kleines Script schreiben,
was zu unregelmässigen Zeitpunkten eine Aktion ausführt
(Kein Newsletter oder Spam Programm sondern ein reines
Testscript für eine Aktion).

Folgende Anforderungen:

Das Script soll 2000 mal innerhalb von 36 oder 48 Stunden
in unregelmäßigen abständen wie ca. 5M. dann mal 10M.
dann wieder evtl. 8M oder so ähnlich eine Funktion aufrufen.

Perl Module erstellen und Funktionsaufrufe usw. kein Probem,
aber wie kann man in Perl die Zeitlich gesteuerten aufrufe realisieren? Hat hier jemand Ansatzpunkte oder ähnliches?

Vielen dank im voraus!
betterworld
 2004-07-20 21:08
#84666 #84666
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Berechne doch einfach die Zeit bis zum naechsten Aufruf und rufe dann sleep mit der berechneten Zeit als Argument auf.
pq
 2004-07-20 21:08
#84667 #84667
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
perldoc -f sleep
also ein sleep x zwischen den aufrufen. oder was genau ist das problem?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
murphy
 2004-07-20 21:25
#84668 #84668
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Alternativ kann man das Problem auch asynchron lösen:
Mit der alarm Funktion setze man einen Timer (mit sekundengenauer Auflösung) und nach Ablauf des Timers erhält der aufrufende Prozess ein ALRM-Signal.
When C++ is your hammer, every problem looks like your thumb.
esskar
 2004-07-20 23:53
#84669 #84669
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=murphy,20.07.2004, 19:25]Alternativ kann man das Problem auch asynchron lösen:
Mit der alarm Funktion setze man einen Timer (mit sekundengenauer Auflösung) und nach Ablauf des Timers erhält der aufrufende Prozess ein ALRM-Signal.[/quote]
kann man eigentlich auch mehrere alarms setzen?
Strat
 2004-07-21 00:03
#84670 #84670
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich denke nicht, weil alarm(...) ja immer den aktuellen alarm setzt bzw. ueberschreibt. man koennte hoechstens mehrere signalhandler fuer local $SIG{ALRM} = ... haben (da faellt mir aber gerade keine Anwendungsmoeglichkeit dafuer ein, und ich habe es auch noch nie ausprobiert).
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
betterworld
 2004-07-21 00:16
#84671 #84671
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=murphy,20.07.2004, 19:25]Alternativ kann man das Problem auch asynchron lösen:
Mit der alarm Funktion setze man einen Timer (mit sekundengenauer Auflösung) und nach Ablauf des Timers erhält der aufrufende Prozess ein ALRM-Signal.[/quote]
In diesem Fall ist nur die Frage, womit der Prozess sich die Zeit vertreiben soll, bevor das ALRM-Signal kommt. Naheliegend waere da sleep, aber dann kann man da auch gleich eine Zeit angeben und braucht nicht alarm aufzurufen.
steffenw
 2004-07-21 00:39
#84672 #84672
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
alarm gibt's nur 1x
$SIG{USER} = sub {love 'Perl' or die};
murphy
 2004-07-21 02:05
#84673 #84673
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=esskar,20.07.2004, 21:53]kann man eigentlich auch mehrere alarms setzen?[/quote]
Nur der Vollständigkeit halber:
alarm gibt's in der Tat nur einmal -- aber unter Linux / BSD und ähnlichen Systemen werden jedem Prozess meistens drei Timer zur Verfügung gestellt: Einer für Echtzeit, einer für Prozesslaufzeit und einer für Prozess- + Kernel im Auftrag von Prozess Laufzeit. Jeder dieser Timer generiert bei Ablauf ein anderes Signal. Siehe dazu auch man 2 setitimer.
When C++ is your hammer, every problem looks like your thumb.
Gast Gast
 2004-07-21 14:03
#84674 #84674
Man könnte auch beim Start des Scripts eine Log-Datei erzeugen, innerhalb einer 36 oder 48 Std. while Schleife per stat() den Status der Log-Datei ermitteln, in Abhängigkeit von (time - (stat("log_file.dat"))[9]) den anderen Prozess starten und schließlich den Timestamp der Log-Datei neu setzten.
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2004-07-20 21:00.