中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python執行時間計算方法及優化實例分析

發布時間:2022-08-03 17:55:43 來源:億速云 閱讀:175 作者:iii 欄目:開發技術

這篇文章主要介紹“Python執行時間計算方法及優化實例分析”,在日常操作中,相信很多人在Python執行時間計算方法及優化實例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python執行時間計算方法及優化實例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    一、時間不一致的猜想

    python腳本運行時間遠遠大于python腳本中統計的計算時間

    猜想:

    1.python中用到的是py2neo的寫數據異步,阻塞進程運行;

    2.python腳本使用統計時間的方式是time.clock(),而這種方式統計的是CPU的執行時間,不是程序的執行時間。

    程序執行時間 = CPU運行時間 + IO時間 + 休眠或等待時間

    二、原因探索

    1.方法一

    import asyncio
    import datetime
    starttime = datetime.datetime.now()
    # long running
    # do something other
    
    async def sayhi():
        print("你好,若竹")
        await asyncio.sleep(10)
        print("用余生去守護")
    
    asyncio.run(sayhi())
    
    
    endtime = datetime.datetime.now()
    print(("程序運行時間為:")+ str((endtime-starttime).seconds)+"秒")

    輸出:

    你好,若竹
    用余生去守護
    程序運行時間為:10秒

    datetime.datetime.now()獲取的是當前日期,在程序執行結束之后,這個方式獲得的時間值為程序執行的時間。

    2.方法二

    import asyncio
    import datetime
    import time
    
    starttime = time.time()
    # long running
    # do something other
    
    async def sayhi():
        print("你好,若竹")
        await asyncio.sleep(10)
        print("用余生去守護")
    
    asyncio.run(sayhi())
    
    endtime = time.time()
    print("程序運行時間為:"+ str(float(endtime-starttime))+"秒")

    輸出:

    你好,若竹
    用余生去守護
    程序運行時間為:10.002257108688354秒

    time.time()獲取自紀元以來的當前時間(以秒為單位)。如果系統時鐘提供它們,則可能存在秒的分數,所以這個地方返回的是一個浮點型類型。這里獲取的也是程序的執行時間。

    3.方法三

    import asyncio
    import datetime
    import time
    
    starttime = time.clock()
    # long running
    # do something other
    
    async def sayhi():
        print("你好,若竹")
        await asyncio.sleep(10)
        print("用余生去守護")
    
    asyncio.run(sayhi())
    
    endtime = time.clock()
    print("程序運行時間為:"+ str(float(endtime-starttime))+"秒")

    輸出:

    .\py_study.py:807: DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead
      starttime = time.clock()
    你好,若竹
    用余生去守護
    .\py_study.py:818: DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead
      endtime = time.clock()
    程序運行時間為:10.0219916秒

    Deprecation Warning: time. clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time. perf_counter or time. process_time instead

    棄用警告:時間。clock在Python 3.3中已棄用,并將從Python 3.8中移除:使用time。perf_counter或時間。process_time代替。

    代碼如下:

    import asyncio
    import datetime
    import time
    
    starttime = time.perf_counter()
    # long running
    # do something other
    
    async def sayhi():
        print("你好,若竹")
        await asyncio.sleep(10)
        print("用余生去守護")
    
    asyncio.run(sayhi())
    
    endtime = time.perf_counter()
    print("程序運行時間為:"+ str(float(endtime-starttime))+"秒")

    輸出:

    你好,若竹
    用余生去守護
    程序運行時間為:10.060287599999999秒

    三、python 運行效率慢的原因

    1.簡介

    編程語言的效率一方面指開發效率,即程序員完成編碼所需的時間,另一方面是運行效率,即計算任務所需的時間。編碼效率和運行效率往往很難兼顧。

    2.運行效率慢的原因

    1.python 是動態語言,造成運行時的不確定性影響運行效率;

    動態語言是一類在運行時可以改變其結構的語言,如新的函數、對象、代碼可以被引入,已有的函數可以被刪除或其他結構上的變化等,該類語言更具有活性,但是不可避免的因為運行時的不確定性也影響運行效率。數據的比較和轉換類型的開銷很大,每次讀取、寫入或引用一個變量,都要檢查類型。很難優化一種極具動態性的語言。Python的許多替代語言之所以快得多,原因在于它們為了性能在靈活性方面作出了犧牲。

    2.python 是解釋執行,不支持JIT(just in time compiler);

    相比于C語言編譯性語言編寫的程序,Python是解釋執行語言,其運行過程是Python運行文件程序時,Python解釋器將源代碼轉換為字節碼,然后再由Python解釋器來執行這些字節碼。其每次運行都要進行轉換成字節碼,然后再由虛擬機把字節碼轉換成機器語言,最后才能在硬件上運行,與編譯性語言相比,其過程更復雜,性能肯定會受影響。

    3.python 中一切皆對象,每個對象都需要維護引用計數,增加額外工作;

    Python是一門面向對象的編程語言,其設計理念是一切皆是對象,如數字、字符串、元組、列表、字典、函數、方法、類、模塊等都是對象,包括代碼,每個對象都需要維護引用計數,因此,增加了額外工作,影響了性能。

    4.python GIL,全局解釋器鎖導致無法實現真正的并發;

    GIL是Python最為詬病的一點,因為GIL,Python中的多線程并不能真正的并發,即使在單線程,GIL也會帶來很大的性能影響,因為python每執行100個opcode就會嘗試線程的切換,因此,影響Python運行效率。

    5.垃圾回收機制,會中斷正在執行的程序,造成所謂的卡頓;

    Python采用標記和分代的垃圾回收策略,每次垃圾回收的時候都會中斷正在執行的程序,造成所謂的頓卡,影響運行效率。

    四、python 優化

    1.優化算法:時間復雜度

    算法的時間復雜度對程序的執行效率影響最大,在python 中可以通過選擇合適的數據結構來優化時間復雜度,如list和set查找某一個元素的時間復雜度分別是O(n)和O(1).不同的場景有不同的優化方式,總的來說,一般有分治,分支界限,貪心,動態規劃等。

    20減少冗余數據

    如用上三角或下三角的方式去保存一個大的對稱矩陣。在0元素占大多數的矩陣里使用稀疏矩陣表示。

    3.合理使用copy與deepcopy

    對于dict和list等數據結構的對象,直接賦值使用的是引用的方式。而有些情況下需要復制整個對象,這時可以使用copy包里的copy和deepcopy,這兩個函數的不同之處在于后者是遞歸復制的。效率也不一樣:(以下程序在ipython中運行)

    4.使用dict或set查找元素

    5.合理使用生成器(generator)和yield

    6.優化循環

    7.優化包含多個判斷表達式的順序

    8.使用join合并迭代器中的字符串

    9.選擇合適的格式化字符方式

    10.不借助中間變量交換兩個變量的值

    11.使用if is

    12.使用級聯比較x < y < z

    13.while 1 比 while True 更快

    14.使用**而不是pow

    15.使用 cProfile, cStringIO 和 cPickle等用c實現相同功能(分別對應profile, StringIO, pickle)的包

    16.使用最佳的反序列化方式

    17.使用C擴展(Extension)

    18.并行編程

    19.終級大殺器:PyPy

    20.使用性能分析工具

    到此,關于“Python執行時間計算方法及優化實例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    疏附县| 柘城县| 包头市| 南华县| 新乐市| 海林市| 西藏| 安西县| 剑阁县| 广丰县| 沐川县| 广德县| 新密市| 郑州市| 南和县| 察隅县| 长岛县| 阿荣旗| 忻城县| 涞水县| 潢川县| 囊谦县| 建昌县| 嵊泗县| 开封县| 六枝特区| 潞城市| 河南省| 大丰市| 云霄县| 田林县| 大方县| 六盘水市| 读书| 开江县| 达州市| 大新县| 沾化县| 本溪市| 台中县| 桃源县|