【发布时间】:2014-05-16 02:10:01
【问题描述】:
我有一个非常简单的 Python 脚本——flickr.py——将文件上传到 Flickr。它看起来像这样:
#!/usr/bin/python
import sys
import os.path
import flickr_api
KEY = '<key>'
SECRET = '<secret>'
filename = sys.argv[1]
basename = os.path.basename(filename)
flickr_api.set_keys(api_key=KEY, api_secret=SECRET)
flickr_api.set_auth_handler('/home/pi/.flickr/token')
flickr_api.upload(photo_file=filename, title=basename)
效果很好。我输入flickr photo.jpg,它就在我的 Flickr 页面上。
但是,我想限制上传速度,这样我就可以在后台运行它,而不会对其他 Internet 流量造成太大影响。于是我跑了……
trickle -s -u 10 flickr photo.jpg
...而且,可悲的是,它似乎没有像我希望的那样将上传速度限制为 10kbps。我已经在另一个窗口中打开了 NetHogs 对此进行了测试。最高可达 80kbps,就像我在没有 trickle 的情况下运行它一样。
我尝试了各种方法——以超级用户身份运行它,在命令前面加上我的 Python 解释器 (trickle -s -u 10 /usr/bin/python flickr photo.jpg) 的完整路径。似乎没有任何效果。
我已经用这个盒子上的其他程序测试了trickle——wget、scp——它的工作原理完全符合预期。我错过了什么?
可能相关的说明:这是在 Raspberry Pi 上。
更新:我使用的 Flickr API 模块就是这个......
https://github.com/alexis-mignon/python-flickr-api
...但我只是用这个重写了我的示例...
...结果相同。
【问题讨论】:
-
也许只有我一个人,但我对涓涓细流不熟悉;这是指这个应用程序吗:monkey.org/~marius/pages/?page=trickle(请注意,pypi 上有一个 python 库也称为涓流,但我认为这不是你正在使用的)
-
是的,就是这个。不是 pypi/Tornado 涓涓细流。
-
您是否尝试过使用普通的 python 套接字应用程序来查看它是否是闪烁应用程序所独有的,或者与 python 与涓流交互的东西有关?
-
看起来涓涓细流依赖于库预加载来将自己插入应用程序和内核之间......也许您的应用程序正在绕过预期的套接字功能?我最好的猜测是 Flickr API 使用 SSL 并且由此产生的 OpenSSL 使用会以某种方式扰乱预加载逻辑。
-
@James_pic,此时 strace 是你的朋友。例如,请参阅here 以了解您可能正在打开哪些共享对象。您还可以使用它来比较工作案例与不工作案例的套接字调用。
标签: python raspberry-pi flickr bandwidth-throttling