通过API上传视频到Vimeo时出现超时错误
我有一个Python脚本,它利用了最新的Vimeo API(https://developer.vimeo.com/api/)来上传一些视频到我的Vimeo账户。
这个脚本大致上是这样工作的:
from vimeo import VimeoClient
vimeo = VimeoClient('my_token_here')
uid = vimeo.upload('/path/to/file.mov')
当file.mov
文件大小在3MB或更小的时候,一切都很顺利,文件可以成功上传。但是如果文件更大,我就会遇到超时错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/fabio/.virtualenvs/venv/src/vimeo/vimeo/uploads.py", line 79, in __call__
return do_upload()
File "/home/fabio/.virtualenvs/venv/src/vimeo/vimeo/uploads.py", line 70, in do_upload
self.upload_segment(upload_uri, _range, video_data, filetype or 'mp4')
File "/home/fabio/.virtualenvs/venv/src/vimeo/vimeo/uploads.py", line 135, in upload_segment
body=data, headers=request_headers)
File "/home/fabio/.virtualenvs/venv/lib/python2.7/site-packages/tornado/httpclient.py", line 85, in fetch
self._async_client.fetch, request, **kwargs))
File "/home/fabio/.virtualenvs/venv/lib/python2.7/site-packages/tornado/ioloop.py", line 389, in run_sync
return future_cell[0].result()
File "/home/fabio/.virtualenvs/venv/lib/python2.7/site-packages/tornado/concurrent.py", line 131, in result
return super(TracebackFuture, self).result(timeout=timeout)
File "/home/fabio/.virtualenvs/venv/lib/python2.7/site-packages/tornado/concurrent.py", line 65, in result
raise self._exception
HTTPError: HTTP 599: Timeout
我使用的Vimeo库是这个:https://github.com/vimeo/vimeo.py。
而我虚拟环境中的Tornado库已经更新到3.2.1版本。
你有什么建议吗?
1 个回答
0
根据Tornado的源代码,HTTPClient
的默认请求超时时间是20秒,而这个是vimeo
正在使用的。看起来Vimeo库会尽量上传尽可能多的视频,然后再询问服务器已经成功上传了多少内容。很可能你上传视频的时间超过了20秒,因此导致了超时。不过,我不太确定他们是否处理得当,因为你会收到来自Tornado的超时错误,但他们似乎想支持一次不上传整个文件。
你可以尝试修改我上面提到的vimeo
库的代码,把超时时间调得更长一些,可以把你本地的那行代码改成类似下面的:
r = HTTPClient().fetch(upload_uri, method="PUT",
body=data, headers=request_headers,
request_timeout=9999.0)
如果这样还是不行,你可以试着在他们的github
问题追踪器上提个问题,可能会有实际参与这个项目的人能进一步帮助你。