博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

python 协程性能测试

Posted on 2018-03-03 17:04  哈哈丶大傻瓜  阅读(790)  评论(0编辑  收藏  举报

记录一下学习过程:

1.无协程:

import time,re,cProfile,requests

from functools import wraps
def fn_timer(function): @wraps(function) def function_timer(*args,**kwargs): t0=time.time() result=function(*args,**kwargs) t1=time.time() print("Total time running :%s seconds"%(str(t1-t0))) return result return function_timer @fn_timer def test(): url = 'https://www.baidu.com' for i in range(1,101): r = requests.get(url) # print(r.text) cProfile.run('test()')

 运行结果:为5.58秒(我用了2个记时间的方法) 

 

 2.用了协程:

import time,re,cProfile,requests

from gevent import monkey,pool monkey.patch_socket() import gevent from functools import wraps pools = pool.Pool(100) def fn_timer(function): @wraps(function) def function_timer(*args,**kwargs): t0=time.time() result=function(*args,**kwargs) t1=time.time() print("Total time running :%s seconds"%(str(t1-t0))) return result return function_timer @fn_timer def test(): url = 'https://www.baidu.com' def req(u): r = requests.get(u) for i in range(1,101): pools.add(gevent.spawn(req,url)) pools.join() # print(r.text) cProfile.run('test()')

  运行结果:耗时为4.68秒

用了协程快了1s多。。。。。提速20%左右。。。。

第一个程序,是单一线程顺序执行100次。

第二个程序,是通过协程池(里面有100个协程)来执行。

 

 记录时间的两种方法分别为:(1)我通过装饰器来计时(2)通过cProfile来计时

我通过这两种方法记时间,误差很小。两种方法都可以用来记录程序运行时间。