Die Leistung von Stackless Python-Netzwerken nimmt im Laufe der Zeit ab?

8

Also spiele ich mit stackless Python herum und schreibe einen sehr einfachen Webserver, um mich selbst mit Mikrothreads / Tasklets zu programmieren. Aber jetzt zu meinem Problem, wenn ich etwas wie ab -n 100000 -c 50 http://192.168.0.192/ (100k Anfragen, 50 Nebenläufigkeit) in Apache-Bank laufen lasse ich etwas wie 6k req / s, das zweite Mal, wenn ich es laufe, bekomme ich 5,5k, das dritte Mal 5k, das vierte Mal , 4.5k usw. bis hinunter zu 100req / s oder so.

Das Problem verschwindet jedoch, wenn ich das Python-Skript neu starte.

Jetzt ist meine Frage warum? Vergiss ich, Tasklets zu löschen? Ich habe die stackless.getruncount () überprüft (und sie scheint aus irgendeinem Grund immer 1 zurückzugeben), also scheint es nicht, als ob irgendwelche toten Tasklets herumhängen würden? Ich habe versucht, .kill () auf allen tasklets, die getan werden, anzurufen, hat nicht geholfen. Ich kann das einfach nicht herausfinden.

%Vor%     
thr 16.02.2009, 22:16
quelle

1 Antwort

14

Zwei Dinge.

Bitte machen Sie zuerst den Klassennamen mit einem Großbuchstaben beginnen. Es ist konventioneller und einfacher zu lesen.

Noch wichtiger ist, dass Sie in der Funktion stackless_accept eine list von Sock Objekten, genannt sockets , ansammeln. Diese Liste scheint endlos zu wachsen. Ja, Sie haben remove , aber es wird nicht immer aufgerufen. Wenn der Socket einen Fehler erhält, scheint er für immer in der Sammlung zu verbleiben.

    
S.Lott 16.02.2009, 22:52
quelle