脚本:
#!/bin/bash
rm -rf *.log
for i in {1..5}
do
ab -n 1000000 -c 800 -k http://172.20.3.10/ > $i.log &
done
wait
cat *log | grep "per second" | awk -F'[^0-9]+' '{s+=$2} END {print s}'
几个改进点:
- 使用keepalive
- 单个ab是有性能上限的[......]
脚本:
#!/bin/bash
rm -rf *.log
for i in {1..5}
do
ab -n 1000000 -c 800 -k http://172.20.3.10/ > $i.log &
done
wait
cat *log | grep "per second" | awk -F'[^0-9]+' '{s+=$2} END {print s}'
几个改进点:
由于Python设计的限制(我说的是咱们常用的CPython)。最多只能用满1个CPU核心。
Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。
1、新建单一进程
如果我们新建少量进程,可以如下:
import multiprocessing
import time
def func(msg):
for i in xrange(3):[......]
Gevent是一个基于greenlet的Python的并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效。
于greenlet、eventlet相比,性能略低,但是它封装的API非常完善,最赞的是提供了一个monkey类,可以将现有基于Python线程直接转化为greenlet,相当于proxy了一下(打了patch)。
今天有空就迫不及待的试一下效果。
1、安装
Gevent依赖libevent和greenlet,需要分别安[......]