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