2011-08-31 19 views
6

Quindi sto avendo un problema piuttosto fastidioso con i caricamenti di file su piloni che spero che qualcuno possa essere in grado di assistermi. Originariamente ho pubblicato il numero here pensando che si trattasse di un problema con Pylon, ma da allora sono giunto alla conclusione che il problema è dovuto al server, ad esempio, incolla, e ho rintracciato esattamente dove si verifica il problema, ma non sono sicuro come risolverlo Il comportamento è il seguente. Ho un'applicazione web Pylons che sto servendo tramite paster. Una parte dell'applicazione consente agli utenti di caricare file sui sistemi, e talvolta questi possono essere piuttosto grandi (> 50mb). Durante tali caricamenti, il server reimposta sporadicamente la connessione (ovvero, in Chrome viene visualizzato l'errore "Errore 101 (net :: ERR_CONNECTION_RESET): la connessione è stata ripristinata.") Ciò non corrisponde a sempre, solo circa ~ 50% di il tempo con file più grandi.Ripristino connessione su caricamento file di grandi dimensioni

In questi casi, il server non affida mai il POST al livello dell'applicazione. Nessuna eccezione è lanciata (almeno, che posso trovare). Ho ridotto il problema a cascade.py (in particolare, il metodo wsgi_application richiamato da httpserver.py). Da quest'ultimo:

risultato = self.server.wsgi_application (self.wsgi_environ, self.wsgi_start_response)

Nel chiamata funzione cascade.py, il file sembra essere scritto un file temporaneo. Il loop relativo inizia alle:

mentre copy_len> 0:

E poi scrive pezzi uno per uno per il file aperto. Nessuna di queste scritture individua un'eccezione. Tuttavia, il server spesso si limita a "andare via" durante queste scritture, apparentemente a caso (anche il tempo non sembra essere correlato a questo). Quindi, se stampo la dimensione copy_len, che viene decrementata, la osservo diminuire fino a un certo punto, e quindi il server invia all'improvviso un 'reset della connessione' (o almeno il client pensa che lo faccia) e il metodo sembra essere uscito (il copy_len cessa di essere stampato, come se il ciclo fosse stato chiuso, sebbene non fosse a 0).

Sono completamente perplesso, come 1) questo accade solo sporadicamente, e 2) Non riesco a rintracciare un errore/Eccezione reale - è solo un po '... muore.

Se è importante, eseguo paste 1.7.3, Python 2.7 e Fedora OS. Qualcuno ha qualche idea su cosa potrebbe accadere e su come potrei risolverlo? Grazie mille per qualsiasi aiuto.

risposta

1

due idee vengono in mente ...

  • prova con un altro server web più robusta, come ad esempio nginx. Può essere eseguito contemporaneamente se necessario. Vedi se il problema persiste. Mentre pasta è in grado di gestire le app Web, non è pensato per gestire enormi trasferimenti di file, per quanto ne so.
  • Stai utilizzando Chunked Transfer Encoding durante il caricamento?
+0

+1 È probabile che un problema del server Web sia più di un problema di Python/Pylon. – Kekoa

0

Non ho problemi con l'apache 2.2 + mod_python 3.3 su Ubuntu 10.04. Ho caricato con successo grandi file (400mb).

Ho utilizzato uploader per creare il modulo di caricamento html.

Problemi correlati