2012-05-21 3 views
5

Ich versuche, MP4/Video in der GAE Python-Entwicklungsumgebung zu dienen (mit dev_appserver.py), aber ich konnte es bisher in meinem Browser nicht spielen.Wie kann ich eine Filmdatei vom Entwicklungsserver (dev_appserver.py) von GAE Python ausliefern?

Da der Fehler 'Broken Pipe' auf dem Entwicklungsserver aufgetreten ist und ich ihn in der Produktionsumgebung (auf dem Server von Google) abspielen konnte, kann das Problem durch die parallelen Anforderungen des Browsers verursacht werden. (Wenn mein Verständnis korrekt ist, ist dev_appserver.py Singlethread und kann keine parallelen Anfragen verarbeiten.)

Ich versuchte '- disable-preconnect' Option von Chrome, aber es hat das Problem nicht gelöst.

Gibt es Workarounds dafür? Ihr Rat wird sehr geschätzt.

Bearbeiten: Die Filmdatei wird als eine statische Ressource gespeichert, und ich habe versucht, direkt darauf zuzugreifen (ohne Video-Tag).

[Versionsinformationen]

  • OS: Ubuntu 12.04 LTE
  • Browser: Chrome 19.0.1084.46, Firefox 12.0
  • GAE: Python - 1.6.5,
  • Python: 2.7.3

[Fehlerprotokoll]

INFO  2012-05-21 07:35:04,575 dev_appserver.py:2891] "GET /static/test.mp4 HTTP/1.1" 200 - 
---------------------------------------- 
Exception happened during processing of request from ('127.0.0.1', 36240) 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock 
    self.process_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request 
    self.finish_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
    File "/home/chikashi/Development/google_appengine/google/appengine/tools/dev_appserver.py", line 2579, in __init__ 
    BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args, **kwargs) 
    File "/usr/lib/python2.7/SocketServer.py", line 640, in __init__ 
    self.finish() 
    File "/usr/lib/python2.7/SocketServer.py", line 693, in finish 
    self.wfile.flush() 
    File "/usr/lib/python2.7/socket.py", line 303, in flush 
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) 
error: [Errno 32] Broken pipe 
---------------------------------------- 
+0

Können Sie uns Ihren Quellcode zeigen? Verwenden Sie den Blobstoredownloadhandler? –

+0

Entschuldigung für den Informationsmangel. Die Filmdatei wird als statische Ressource gespeichert, daher verwende ich den BlobstoredDownloadhandler nicht. –

+0

Ja, dev_appserver.py ist single-threaded. – allyourcode

Antwort

1

Bei einem sehr langen Vorgang (z. B. beim Abspielen eines Films) wird ein Thread bis zum Abschluss verknüpft. Da der Entwicklungsserver single-threaded ist, muss sein einziger Worker-Thread warten, bis der Download beendet ist, bevor er die nächste Anfrage liefern kann.

In jedem Fall, die Produktion App Engine-Umgebung hat dieses Problem nicht und wird gerne Ihre Datei dienen, solange es nicht zu groß ist (ich erinnere mich nicht an das Limit).

Sie können auch die Filmdatei von einem anderen Server aus bereitstellen. Abhängig von der Bandbreite, die Sie verwenden, gibt es billigere Hosting-Lösungen als App Engine (auch wenn keine so cool ist wie ihre ;-))

+0

Danke für die Antwort, rbanffy! Ich möchte klarstellen, dass Google Chrome und Firefox (ich habe sie getestet) den Film mit Multi-Verbindung herunterladen? In meinem Testfall müssen diese Browser nur die Filmdatei herunterladen (Angegebene URL für die Filmdatei). Daher muss es möglicherweise keine Multiverbindung verwenden, denke ich. Ich schätze deine Hilfe wirklich !! –

+1

Die maximale Dateigröße beträgt 1 MB – Bobby

Verwandte Themen