2009-05-22 1 views
3

Ich habe ein Python-CGI-Skript, das über einen HTTP-Post hochgeladene Dateien empfängt. Die Dateien können groß sein (300+ MB). Die Sache ist, cgi.FieldStorage() ist unglaublich langsam, um die Datei zu bekommen (eine 300Mb-Datei brauchte 6 Minuten, um "empfangen" zu werden). Das gleiche zu tun, indem Sie nur die Standardeingabe gelesen haben, dauerte ungefähr 15 Sekunden. Das Problem mit letzterem ist, dass ich die Daten selbst analysieren müsste, wenn es mehrere Felder gibt, die gepostet werden.Python cgi FieldStorage langsam, Alternativen?

Gibt es schnellere Alternativen zu FieldStorage()?

+0

Duplizieren von: http://stackoverflow.com/questions/1446765/python-cgi-fieldstorage-too-slow –

+0

link defekt ..... – ubugnu

Antwort

2

"[I] würde mich um die Daten zu analysieren haben"

Warum? CGI hat eine parser, die Sie explizit aufrufen können.

Lesen Sie den hochgeladenen Stream und speichern Sie ihn in einer lokalen Festplattendatei.

Verwenden Sie für eine rasante Geschwindigkeit eine StringIO In-Memory-Datei. Beachten Sie jedoch, wie viel Arbeitsspeicher der Upload benötigt.

Verwenden Sie cgi.parse(mylocalfile).

+0

cgi doc sagt über parse.parse_multipart: "Dies ist einfach zu bedienen aber nicht sehr gut, wenn Sie erwarten, dass Megabyte hochgeladen werden. Verwenden Sie in diesem Fall stattdessen die FieldStorage-Klasse, die viel flexibler ist. " – Ash

+0

Flexibilität hat in der Regel ihren Preis. Und diese Kosten sind normalerweise Geschwindigkeit. –

+0

Haben Sie es versucht? –