Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7586[/thread]

Mehrere Schreiber bei IO::Pipe

Leser: 1


<< >> 8 Einträge, 1 Seite
pygo
 2006-01-03 11:22
#61479 #61479
User since
2006-01-03
5 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich benutze in meinem Script das Modul IO::Pipe,  um Nachrichten von verschiedenen Children (in Normalfall genau 71) an ihren Vater zu schicken. Da alle Nachrichten eigentlich gleich aufgebaut sind und am Ende sowieso in einen grossen Pool 'geworfen' werden, habe ich dazu nur genau eine Pipe verwendet. Ausserdem kann ich so vermeiden, durch das Abfragen von allen 71 Pipes viel Zeit zu verlieren.
Allerdings kommt es jetzt zu einem unerklärlichen Datenverlust - wobei das heisst, das etwa drei Infos von 100.000 verloren gehen. Die Moduldokumentation schweigt sich leider dazu aus, ob es überhaupt gesund ist, mit mehr als einem writing-end zu arbeiten, aber meine erste Überlegung war, ob sich da vielleicht die Enden in die Quere kommen.
Kann mir da jemand weiterhelfen oder vielleicht sogar einen Tipp geben, wie man solch einen Verlust (wenn es ihn den tatsächlich über die Pipe gibt) vermeiden kann?!

Herzlichsten Dank!
Pygoscelis
esskar
 2006-01-03 11:42
#61480 #61480
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
arbeite mit msgid's.
wenn der client merkt, dass ein message fehlt, weil er message 1 und message 3 empfangen hat, mäkert er und verlangt nochmal message 2
pygo
 2006-01-03 11:59
#61481 #61481
User since
2006-01-03
5 Artikel
BenutzerIn
[default_avatar]
Hi,
Das heisst dann aber auch, dass ich für jeden der Child-Prozesse eine Pipe in die andere Richtung brauche, um das 'Gemecker' auch hinzuschicken? Na - dann versuch ich das doch einfach mal.
Danke auf jeden Fall schon mal für den Tipp!
esskar
 2006-01-03 12:04
#61482 #61482
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hmm...
arbeitest du mit named-pipes oder mit normalen (unnamed pipes)... unter windows zumindest sind die named-pipes recht stabil. der Papa macht einen auf und kann dann mit den kindern sprechen und ihnen auch zuhören.
pygo
 2006-01-03 13:05
#61483 #61483
User since
2006-01-03
5 Artikel
BenutzerIn
[default_avatar]
Ich arbeite mit anonymous pipes unter Linux :)
esskar
 2006-01-03 15:38
#61484 #61484
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=pygo,03.01.2006, 12:05]Ich arbeite mit anonymous pipes unter Linux :)[/quote]
hmm.
gibt es named pipes unter linux ?
wäre das eine alternative ?
aber im grunde musst du dann doch 71 * 2 pipe-handles im papa haben oder ? und jedes kind hat nur 2 pipe-handles (eine zum Lesen, eine zum Schreiben).
pygo
 2006-01-03 16:28
#61485 #61485
User since
2006-01-03
5 Artikel
BenutzerIn
[default_avatar]
Ja die gibt es. Benutze ich sogar selbst, aber nur, um mit nicht-familiären Prozessen zu kommunizieren. Werden halt wie Dateien verwendet und ich glaube, damit geht einer meine Leseoperationen flöten (die ein Objekt als Handle benötigt, weil sie mit Data::Select arbeitet). Deshalb würde ich ungern wechseln.

Ich bin gerade dabei, mal einen Testlauf mit einseitigen Message-IDs zu machen. Sprich, der Vater soll mir einfach mal sagen, bei welchem der Kinder da irgendeine Message nicht da zu sein scheint. Dann kann ich zumindest schon mal rausfinden, ob es wirklich daran liegt oder ich doch irgendwas anderes überesehen habe.
pygo
 2006-01-04 13:58
#61486 #61486
User since
2006-01-03
5 Artikel
BenutzerIn
[default_avatar]
Nur als Info mal: Ich hab den Testlauf seit gestern durchlaufen lassen und von den 71 Kindern wurden zwischen  4000 und 200.000 Nachrichten geschickt. In sechs Fällen sind dabei zwischen 2 und gleich 10 Nachrichten von jeweils einem Kind verloren gegangen. In irgedneiner Weise scheint es also tatsächlich in der Pipe zu verlusten zu kommen... :(
<< >> 8 Einträge, 1 Seite



View all threads created 2006-01-03 11:22.