Hallo Thorsten,
Vorneweg: Mit Perl kenne ich mich kaum aus, daher weiß ich nicht, wieviel es
kann. Ich kenne jedoch C und viele UNIX-Features, die eigentlich auch unter
Perl vorhanden sein müssten.
Ich frage mich, wie man das am Besten realisiert. Einfach wäre es, wie
oben angedeutet, mittels temp. Dateien, die man erzeugt, später ausgibt.
Blöd. Du verlässt Dich darauf, dass der User nicht einfach mal Stopp drückt
und somit dein erstes Script abwürgt.
Schöner fände ich es allerdings, wenn man mittels fork() (ich verwende
Perl!) einen Childprozess erzeugt, der die DB-Abfrage erledigt, der
Hauptprozess fragt einen Zustand ab.
Das ist schon mal ein guter Ansatz. Jetzt brauchst Du nur noch das Stichwort
IPC. Message-Queues wären für Deinen Ansatz ideal. Folgender Ansatz:
Ablauf:
Dein Anzeigescript schaut nach, ob eine Message-Queue mit dem Ergebnis
schon vorhanden ist.
Ja => Auslesen der Message-Queue. Wenn nichts drinnen steht, dann bitte
warten. Wenn etwas drinnen steht, dann ist das als der Dateiname mit dem
Resultat zu werten. Message-Queue freigeben.
Nein => Kreierung des Kindprozesses und Ausgabe von Bitte Warten.
Kindprozess: Erzeugung der Message-Queue. Berechnung wird gestartet.
Ergebnis in einer temporären Datei zwischengespeichert. Wenn das Ergebnis
vorliegt, Dateiname in die Message-Queue schreiben und Przoess beenden.
Für message-Queses sind folgende Funktionen (unter C jetzt, wie gesagt, Perl
kenne ich nicht gut genug) relevant:
msgget
msgsnd
msgrcv
msgctl
Ach ja, vergiss nicht, das IPC_NOWAIT-Flag für msgrcv zu setzen, sonst hast
Du blokierende Aufrufe. (und die wollen wir ja nicht)
Hat jemand sowas schonmal gemacht???
Ich nicht. ;)
Weitere Frage: Kannst Du mit Optimierung nichts an Performance aus Deiner
DB-Abfrage rausholen?
Ich hoffe, der Ansatz hilft Dir.
Gruesse,
Christian
Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
-- Albert Einstein