<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
python指令碼執行時間遠遠大於python指令碼中統計的計算時間
猜想:
1.python中用到的是py2neo的寫資料非同步,阻塞程序執行;
2.python指令碼使用統計時間的方式是time.clock(),而這種方式統計的是CPU的執行時間,不是程式的執行時間。
程式執行時間 = CPU執行時間 + IO時間 + 休眠或等待時間
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()獲取的是當前日期,在程式執行結束之後,這個方式獲得的時間值為程式執行的時間。
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()獲取自紀元以來的當前時間(以秒為單位)。如果系統時鐘提供它們,則可能存在秒的分數,所以這個地方返回的是一個浮點型型別。這裡獲取的也是程式的執行時間。
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秒
程式語言的效率一方面指開發效率,即程式設計師完成編碼所需的時間,另一方面是執行效率,即計算任務所需的時間。編碼效率和執行效率往往很難兼顧。
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採用標記和分代的垃圾回收策略,每次垃圾回收的時候都會中斷正在執行的程式,造成所謂的頓卡,影響執行效率。
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執行時間計算方法以及優化總結的文章就介紹到這了,更多相關Python執行時間內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45