PyCharm提供了性能分析工具:Profile
利用Profile工具可以对代码进行性能分析,找出代码瓶颈所在。
1、Profile的使用
使用Profile方式一:
使用Profile方式二:
2、案例分析
2.1 简单函数示例
import time
def fun1():
print('fun2')
time.sleep(1)
def fun2():
print('fun3')
time.sleep(2)
def fun3():
print('fun5')
time.sleep(1)
fun2()
fun1()
fun2()
fun3()
使用profile开始测试,代码运行结束后会生成一栏测试结果,测试结果由两部分构成,Statistcs(性能统计)和Call Graph(调用关系图)。
Statistcs(性能统计):
性能统计界面由Name、Call Count、Time(ms)、Own Time(ms) 4列组成一个表格。
- 表头Name显示被调用的模块或者函数
- Call Count显示被调用的次数
- Time(ms)显示运行时间和时间百分比,时间单位为毫秒(ms)
- 点击表头上的小三角可以升序或降序排列表格
- 在Name这一个列中双击某一行可以跳转到对应的代码
举例分析:以func2这一行为例,func2被调用了2次,运行时间为4002ms,占整个运行时间的66.6%。
Call Graph(调用关系图):
Call Graph(调用关系图)界面直观展示了各函数直接的调用关系、运行时间和时间百分比。
- 箭头表示调用关系,由调用者指向被调用者
- 矩形的左上角显示模块或者函数的名称,右上角显示被调用的次数
- 矩形中间显示运行时间和时间百分比
- 矩形的颜色表示运行时间或者时间百分比大小的趋势
2.2 简单项目中示例:
示例代码:
import datetime
from bson.json_util import dumps
from flask import Flask, Response
from flask_mongoengine import MongoEngine
app = Flask(__name__)
db = MongoEngine()
class Movie(db.Document):
name = db.StringField(required=True, unique=True)
casts = db.ListField(db.StringField(), required=True)
genres = db.ListField(db.StringField(), required=True)
created_at = db.DateTimeField(default=datetime.datetime.utcnow)
@app.route('/movies')
def get_movies():
movies = Movie.objects()
movies_list = []
for movie in movies:
movie_dict = movie.to_mongo().to_dict()
movie_dict['created_at'] = movie.created_at.isoformat()
movies_list.append(movie_dict)
movies_json = dumps(movies_list)
return Response(movies_json, mimetype="application/json", status=200)
if __name__ == '__main__':
app.config['MONGODB_SETTINGS'] = {
'host': 'mongodb://root:88888888@192.168.124.49:27017/test-movie?authSource=admin&retryWrites=true&w=majority'
}
db.init_app(app)
app.run()
使用profile运行:
项目启动时Statistics展示:
Call Graph展示:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142808.html