记录一下学习过程:
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来计时
我通过这两种方法记时间,误差很小。两种方法都可以用来记录程序运行时间。