2009-05-22 6 views
3

J'ai un script cgi python qui reçoit les fichiers téléchargés via un post http. Les fichiers peuvent être volumineux (plus de 300 Mo). La chose est, cgi.FieldStorage() est incroyablement lent pour obtenir le fichier (un fichier de 300 Mo a pris 6 minutes pour être "reçu"). Faire la même chose en lisant juste le stdin a pris environ 15 secondes. Le problème avec ce dernier est, je devrais analyser les données moi-même s'il y a plusieurs champs qui sont postés.Python cgi FieldStorage lent, alternatives?

Existe-t-il des alternatives plus rapides à FieldStorage()?

+0

Duplicata de: http://stackoverflow.com/questions/1446765/python-cgi-fieldstorage-too-slow –

+0

lien cassé ..... – ubugnu

Répondre

2

"[I] aurait pour analyser les données moi-même"

Pourquoi? CGI a un parser, vous pouvez appeler explicitement.

Lisez le flux téléchargé et enregistrez-le dans un fichier de disque local.

Pour une vitesse fulgurante, utilisez un fichier StringIO en mémoire. Soyez conscient de la quantité de mémoire que le téléchargement va prendre.

Utilisez cgi.parse(mylocalfile).

+0

cgi doc dit à propos de parse.parse_multipart: "C'est facile à utiliser mais pas très bon si vous attendez mégaoctets à télécharger - dans ce cas, utilisez la classe FieldStorage à la place qui est beaucoup plus flexible. " – Ash

+0

Typiquement, la flexibilité a un coût. Et ce coût est généralement la vitesse. –

+0

L'avez vous essayé? –