>  기사  >  백엔드 개발  >  Python을 사용하여 고성능 테스트 도구 구현 (2)

Python을 사용하여 고성능 테스트 도구 구현 (2)

little bottle
little bottle앞으로
2019-04-10 11:29:014336검색

이전 글 "파이썬을 사용하여 고성능 테스트 도구 구현(1)"에서 파이썬 파서를 변경하여 성능을 최적화했지만, 아직 실제 요구 사항과는 거리가 멀었습니다. 이 기사에서는 자동화된 테스트에 최적화된 코드를 소개합니다.代 계획 2: 코드 최적화


🎜🎜🎜 🎜🎜🎜🎜 🎜🎜🎜🎜 🎜🎜🎜🎜 🎜 🎜🎜🎜 🎜🎜🎜🎜 🎜🎜🎜🎜 🎜🎜🎜🎜 🎜🎜🎜🎜 🎜🎜🎜🎜 🎜🎜🎜🎜. 코드를 최적화하려면 먼저 코드의 병목 현상을 찾아야 합니다. 가장 쉬운 방법은 로그를 추가하거나 디버깅이 완료된 후 삭제해야 하는데 이것이 더 번거롭습니다. Python은 profile, cProfile, hotshot, pystats 등 많은 프로필 도구도 제공하지만 이러한 도구에서 제공하는 결과는 한 눈에 가장 많은 시간을 차지하는 함수나 행을 파악하기가 쉽지 않습니다. python line_profiler는 이러한 기능을 제공합니다. "빠르고 정확하며 무자비하다"고 할 수 있는 라인이 무엇인지 직관적으로 알 수 있습니다. 다운로드 주소: http://pythonhosted.org/line_profiler/🎜🎜 line_profiler, in C :Python27Libsite-packages 디렉터리에 kernprof.py가 있습니다. 다음 예와 같이 병목 현상이 발생할 수 있는 함수에 @profile을 추가하세요. 🎜
    @profile
    def create_msg2(self,H,msg):
        li = msg.keys()
        msg_type=li[0]
        ULR_avps=[]
        ULR=HDRItem()
        ULR.cmd=self.dia.dictCOMMANDname2code(self.dia.MSG_TERM[msg_type])

        if msg_type[-1]=='A':
            msg=msg[msg_type]
            self.dia.setAVPs_by_dic(msg_type,msg,ULR_avps)
            ULR.appId=H.appId
            ULR.EndToEnd=H.EndToEnd
            ULR.HopByHop=H.HopByHop
            msg=self.dia.createRes(ULR,ULR_avps)

        else:
            self.dia.setAVPs(msg_type,msg,ULR_avps)
            ULR.appId=self.dia.APPID
            self.dia.initializeHops(ULR)
            msg=self.dia.createReq(ULR,ULR_avps)

        return msg
🎜이 파일을 실행하세요: kernprof.py -l -v D:projectmpsrcprotocolslibdiametermt.py를 사용하면 다음과 같은 결과를 얻게 됩니다. 이 그림에서 setAVPS 메서드가 96.6%의 시간을 차지하는 것을 직관적으로 알 수 있습니다. 그런 다음 이 함수를 찾아 @proflie 수정자를 다시 추가합니다(프로필은 한 번에 여러 함수에 추가할 수 있습니다). setAVPS 비율을 더 자세히 볼 수 있습니다. 함수의 각 코드 줄에 소요되는 시간입니다. 🎜🎜🎜🎜🎜🎜 단계별 분석을 통해 오픈 소스 프로토콜 라이브러리의 setAVPS 메서드에서 avp를 찾는 속성이 3000의 루프에서 검색되는 것을 볼 수 있습니다. 각 AVP는 3000으로 루프되어야 합니다. 횟수, 직경 메시지에는 최소 10개의 avps가 있으며 하나의 avp를 인코딩할 때마다 30,000번의 루핑이 필요합니다. 우리의 초기 해결책은 성능 테스트에 사용되지 않은 많은 AVPS를 삭제하는 것이었습니다(방법이 없고 테스트 개발 리소스가 제한되어 있으며 좋은 디자인이 없는 경우가 많으므로 먼저 요구 사항을 충족하는 것을 만드십시오.). 개선된 150정도로 아직 수요에 비하면 멀었습니다. 그래서 이름을 기준으로 AVP의 속성을 빠르게 찾을 수 있도록 AVP를 사전 모드로 변경했습니다. 🎜🎜코드 최적화 외에도 인코딩 AVP 스레드 수도 증가했습니다. 다음 장에서는 멀티스레딩 및 멀티 프로세스가 성능에 미치는 영향에 대해 설명합니다. 계속됩니다. . . . 🎜🎜【추천 강좌: 🎜Python 동영상 강좌🎜】🎜🎜🎜

위 내용은 Python을 사용하여 고성능 테스트 도구 구현 (2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제