我有450mb的视频。我想把它上传到xvideos.com网站我用在我的剧本里
xvideos_log_data = {'login': xv_login,
'password': password,
'referer': 'http://upload.xvideos.com/account',
'log': 'Login to your account'}
def xvideos(f_path):
_print('xvideos started uploading...')
try:
s = requests.Session()
s.post('http://upload.xvideos.com/account', data=xvideos_log_data, headers=headers)
rp = s.get('http://upload.xvideos.com/account/uploads/new')
apc = re.search(r'onclick="launch_upload_basic\(\'(.*?)\'\)', rp.text).group(1)
payload = {'APC_UPLOAD_PROGRESS': apc,
'message': ''}
r = s.post('http://upload.xvideos.com/account/uploads/submit?video_type=other',
data=payload,
files={'upload_file': open(f_path, 'rb')}, headers=headers)
edt = re.search(r'<a href="(.*?)" target="_top"', r.text)
if edt is None:
_print(re.search(r'inlineError.*>(.*?)<', r.text).group(1))
return
payload = {'title': make_title(),
'keywords': ' '.join(make_tags()),
'description': choice(description),
'hide': 0,
'update_video_information': 'Update information'}
r = s.post('http://upload.xvideos.com' + edt.group(1), data=payload, headers=headers)
_print('xvideos finished uploading')
except Exception as error:
_print(error)
finally:
return
问题是上传速度很慢,但很成功。我在服务器上启动脚本。当我尝试在浏览器中上传时-很快。在
有什么问题吗?在
我在上传到amazons3时也遇到了同样的问题。在
我的浏览器可以以8MB/s的速度上传,但是httplib或请求只能以1MB/s的速度进行
经过大量的搜索,我发现httplib确实是罪魁祸首。在
大小固定为8192。在
我创建了这个Monkey补丁并测试了20MB到500MB文件的许多值。在
有了40万,我的速度和我的浏览器一样:8MB/s.:)
问题很可能是请求库下面的Python
httplib
代码。在在旧的Python版本(2.2)中,分块编码流是很糟糕的,现在已经很糟糕了。通过直接在套接字上使用定制的http层替换它,并更好地处理缓冲区,我可以让一个应用程序以2%的CPU进行流式传输,就像在快速的网络链路上使用完全的链路一样。由于缓冲效率非常低,Httplib只能达到大约1mb/s,CPU使用率为50%或更多。httplib对于短请求很好,但是对于大量上传(没有调整/黑客攻击)就不太好了。在
根据您的网络和操作系统设置,您可以尝试一些方法来改进:
通过
setsockoption
SO_SNDBUF
优化您的套接字缓冲区,如果您不需要很多连接,并且有一个快速网络,则可以使用4MB或更大的内存,以减少快速管道(10GE及更多)上总是空缓冲区的问题。使用不同的http库(例如pycurl或Twisted,带有一些补丁)并使用更大的缓冲区进行传输,例如,让每个
socket.send()
调用移动几MB的数据,而不是一些小的4kB缓冲区。如果操作正确,Python几乎可以完全利用10ge链接。在
相关问题 更多 >
编程相关推荐