gevent做压测

刚刚想测一下上传接口的性能,因为服务端用的是Tornado,然后线程池来写文件,本地想试一下大并发上传。

多线程是可以,不过性能有限。

于是用gevent,写法和多线程一样,不过是在一个线程里面完成,性能相当不错。不过一开始的几百个请求出了奇怪的错误:

URLError: <urlopen error [Errno 8] nodename nor servname provided, or not known>

后来发现是文件打开句柄限制了,我用的是Mac。

ulimit -n返回256,真是坑爹,然后用ulimit -n 65535改了下限制,就好了。


gevent现在看来,非常适合写爬虫,是多路IO复用的模型,性能远远强过多线程,而且也是让我们可以用同步的写法写代码。

最强的是它的monkey patch,直接patch了socket,所以urllib里面的东西就自动拥有了异步的能力。

还是同步的写法,不过底层已经变成异步了。

gevent简单教程:gevent For the Working Python Developer