PyCharm的Profile工具进行python代码性能分析
  TEZNKK3IfmPf 2023年11月14日 29 0

PyCharm提供了性能分析工具:Profile

利用Profile工具可以对代码进行性能分析,找出代码瓶颈所在。

1、Profile的使用

使用Profile方式一:

PyCharm的Profile工具进行python代码性能分析

使用Profile方式二:

PyCharm的Profile工具进行python代码性能分析

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列组成一个表格。

PyCharm的Profile工具进行python代码性能分析

  • 表头Name显示被调用的模块或者函数
  • Call Count显示被调用的次数
  • Time(ms)显示运行时间和时间百分比,时间单位为毫秒(ms)
  • 点击表头上的小三角可以升序或降序排列表格
  • 在Name这一个列中双击某一行可以跳转到对应的代码

举例分析:以func2这一行为例,func2被调用了2次,运行时间为4002ms,占整个运行时间的66.6%。

Call Graph(调用关系图):

Call Graph(调用关系图)界面直观展示了各函数直接的调用关系、运行时间和时间百分比。

PyCharm的Profile工具进行python代码性能分析

  • 箭头表示调用关系,由调用者指向被调用者
  • 矩形的左上角显示模块或者函数的名称,右上角显示被调用的次数
  • 矩形中间显示运行时间和时间百分比
  • 矩形的颜色表示运行时间或者时间百分比大小的趋势

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运行:

PyCharm的Profile工具进行python代码性能分析

项目启动时Statistics展示:

PyCharm的Profile工具进行python代码性能分析

Call Graph展示:

PyCharm的Profile工具进行python代码性能分析

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
TEZNKK3IfmPf