Schrift
[thread]7416[/thread]

flock() & apache (Seite 2)

Leser: 2


<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
Dubu
 2005-11-02 12:09
#59520 #59520
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Froschpopo,02.11.2005, 07:19]
Code: (dl )
1
2
3
4
5
open(FILE, ">/srv/www/htdocs/tables/rows/base.csv") or die $!;
flock FILE, 2;
print FILE @cont;
flock FILE, 8;
close(FILE);
[/quote]
Wie vermutet: Nach dem open() ist deine Datei schon leer, dafuer sorgt das ">". Das flock() kann da bei hoher Last schon zu spaet kommen.

Und esskar hat natuerlich auch recht, dass das zweite flock() weg muss, sonst wird die Datei evtl. entsperrt, bevor die Daten drin sind. (Durch Pufferung kann es sein, dass das erst beim close() passiert.)

Schau dir perldoc -q "get locking" an.
GwenDragon
 2005-11-02 13:41
#59521 #59521
User since
2005-01-17
14538 Artikel
Admin1
[Homepage]
user image
Also doch race condition ;)
Wie ich oben schon sagte: sysopen und flock

Siehe auch: http://www.cis.uni-muenchen.de/~hbosk/perl2_ws03/file_locking.html\n\n

<!--EDIT|renee|1130933231-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

pq
 2005-11-02 14:07
#59522 #59522
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich hatte doch Wiki:Wie sperre ich eine Datei schon erwähnt, Froschpopo. da steht genau dein fehler drin. warum liest du das nicht?
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
Froschpopo
 2005-11-03 19:29
#59523 #59523
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hmm, also das Problem ist wohl nun nach einigen versuchen zur hauptzeit:
das script wird mittels ">" direkt nach dem open() neuerstellt, bevor der flock überhaupt zugreift, wie Gwen schon sagte.

Also mein Problem ist folgendes:
Ich habe lauter Sessions in einer Datei, die deren Timestamp bei einem Zugriff des Session-Besitzers natürlich erneuert werden muss.
Jetzt wären zwei dinge interessant:
Was ist schneller: Die Datei einlesen, den entsprechenden Wert bearbeiten, anschließend alles wieder in die zwischenzeitlich mit ">" gelöschte datei hineinschreiben?

oder mit seek() gezielt die entscheidende Stelle bearbeiten?

Des weiteren interessiert mich, was use Fcntl qw(:DEFAULT :flock); jetzt eigentlich genau macht !
nepos
 2005-11-03 20:20
#59524 #59524
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Froschpopo,03.11.2005, 18:29]Des weiteren interessiert mich, was use Fcntl qw(:DEFAULT :flock); jetzt eigentlich genau macht ![/quote]
Importiert ein paar Konstanten aus dem Modul Fcntl in dein Perlskript, das sagt dir aber auch ein perldoc Fcntl.
Froschpopo
 2005-11-03 21:39
#59525 #59525
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
was machen die kostanten? bin ja leider nicht so der englischkönner...
pq
 2005-11-04 11:04
#59526 #59526
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Froschpopo,03.11.2005, 18:29]Was ist schneller: Die Datei einlesen, den entsprechenden Wert bearbeiten, anschließend alles wieder in die zwischenzeitlich mit ">" gelöschte datei hineinschreiben?[/quote]
du darfst die datei nur einmal öffnen! ich dachte, das wäre jetzt klar geworden.
und du darfst sie nicht mit '>' öffnen. ich dachte, das wäre auch klar
geworden.
du sollst sie mit '+<' öffnen, zum lesen und schreiben.
mehr kann ich aber auch nicht dazu sagen, weil ich keine ahnung habe,
was in der datei drinsteht.
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
pq
 2005-11-04 11:06
#59527 #59527
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Froschpopo,03.11.2005, 20:39]was machen die kostanten? bin ja leider nicht so der englischkönner...[/quote]
LOCK_EX: LOCK EXCLUSIVE = SPERRE EXKLUSIV
LOCK_SH: LOCK SHARED = SPERRE GETEILT (mit anderen)
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
pq
 2005-11-04 11:14
#59528 #59528
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Froschpopo,03.11.2005, 18:29]Was ist schneller:[/quote]
vermutlich eine datenbank.
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
Froschpopo
 2005-11-04 15:27
#59529 #59529
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
danke :-)
Mit Datenbank hatte ich auch schlechte erfahrung, z.b. mit doppelten Inserts bei hoher Serverauslastung !
Noch eine Frage zum Locken: Wo ist denn der Unterschied zwischen LOCK_EX und der in meinem Beispiel verwendeten "2" ?
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2005-11-01 16:03.