我正在使用 twisted.web 框架在 python 中编写一个应用程序,以使用 html 5 流式传输视频。
视频是通过服务器发送static.File('pathtovideo').render_GET()
的 问题是一次只能流式传输一个视频,因为它占用了整个过程。
无论如何都要使流式传输异步或非阻塞,无论哪个术语在这里都合适。
我尝试使用 deferToThread 但这仍然束缚了这个过程。
这是我当前使用的类,其中 Movie 是一个 ORM 表,而 mid 只是任意行的 id。
class MovieStream(Resource):
isLeaf=True
def __init__(self, mid):
Resource.__init__(self)
self.mid = mid
def render_GET(self, request):
movie = Movie.get(Movie.id == self.mid)
if movie:
defered = deferToThread(self._start_stream, path=movie.source), request=request)
defered.addCallback(self._finish_stream, request)
return NOT_DONE_YET
else:
return NoResource()
`
def _start_stream(self, path, request):
stream = File(path)
return stream.render_GET(request)
def _finish_stream(self, ret, request):
request.finish()