[Cologne-pm] shared vars mit mod_perl

Johannes Huettemeister j.huettemeister at googlemail.com
Wed Apr 4 08:33:56 PDT 2007


Am 04.04.07 schrieb A. Pagaltzis <pagaltzis at gmx.de>:
> * Johannes Huettemeister <j.huettemeister at googlemail.com> [2007-04-03 16:10]:
> > 1. Wie kann eine Child die Variable schon kennen bevor der
> > erste request bearbeitet wurde? Hilft hier der "startup.pl"
> > Mechnanismus?
>
> Genau das. Dort werden Dinge erledigt, die der allererste Apache-
> Prozess beim Start erledigt (der Mutterprozess, der selber keine
> Anfragen bearbeitet). Alle Tochterprozesse erben die Perl-
> Umgebung dieses Prozesses.
>
> Pack also hier deine Datenstruktur in eine Paketvariable und sie
> wird dann den Tochterprozessen zur Verfügung stehen.

Hi Aristotoeles,

hab ich jetzt so gemacht, siehe auch http://modperlbook.org/html/ch18_01.html
Klappt bis jetzt sehr gut, schönes Buch übrigens ;-)

>
> * Susan Dittmar <Susan.Dittmar at gmx.de> [2007-04-03 16:20]:
> > - Ist data.pl neuer als data.xml, dann wird data.pl gelesen (das ist die
> >  Datenstruktur, die das Einlesen der xml-Datei erzeugt, die dann mittels
> >  Data::Dumper in eine Datei geschrieben wurde; lädt *viel* schneller als
> >  das Parsen der xml-Datei).
> > - Ist data.xml neuer, dann wird die xml-Datei eingelesen und die
> >  Datenstruktur direkt nach dem Lesen in data.pl mittels Data::Dumper
> >  exportiert (File Locking nicht vergessen, wenn man mit parallelen
> >  Prozessen auf dieselbe Datei zugreifen will!)
>
> Du kannst dir das Selberschreiben hierbei übrigens sparen: nimm
> einfach Cache::Cache. Da kannst du dann auch die Backends
> auswechseln, also zB Shared Memory für den Cache verwenden, fast
> ohne deinen Code zu ändern.
>
> * Johannes Huettemeister <j.huettemeister at googlemail.com> [2007-04-03 16:50]:
> > das Einlesen in eine Perl Datenkstruktur ist also ne Art
> > Hintergrund Prozess, wenn ich das richtig kapiert habe.
>
> Nein, sie meint nur, dass du die Datenstruktur nach dem Parsen in
> einer Datei hinterlegst, und alle anderen Prozesse dann diese
> vorgeparste Datei laden, wenn sie nicht älter ist, als die
> XML-Datei.
>
> In deinem Fall dürfte das Laden in startup.pl aber die einfachere
> Lösung sein.

yep! In java hab ich übrigens das gleiche gemacht (also wie mit
startup.pl) und ich muß sagen in java bin ich ein noch schlimmerer
Dilettant, aber lässt sich durch Hintergrundthreads zB gestartet in
der init Methode eines Servlets noch eleganter lösen. Aber sonst ist
Perl schöner :-)

cheers jo.


More information about the Cologne-pm mailing list