我有一個flask應用程序,我正在嘗試評測(我是新手)。當我運行它時,我得到了這樣的結果:
3327 function calls (3247 primitive calls) in 7.350 seconds
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
7/1 0.000 0.000 7.350 7.350 {built-in method builtins.exec}
1 0.000 0.000 7.350 7.350 <string>:1(<module>)
1 0.000 0.000 7.350 7.350 vo_app_v2.py:1094(run_app)
1 0.000 0.000 7.350 7.350 app.py:1064(run)
1 0.000 0.000 7.349 7.349 serving.py:936(run_simple)
1 0.000 0.000 7.348 7.348 serving.py:739(serve_forever)
1 0.000 0.000 7.348 7.348 socketserver.py:215(serve_forever)
15 0.000 0.000 7.347 0.490 selectors.py:403(select)
15 7.347 0.490 7.347 0.490 {method 'poll' of 'select.poll' objects}
最后一行是什么意思?我如何追蹤代碼中的行?
poll()
是一個更新的系統調用,它取代了一個名為select()
的舊接口(甚至更新的Linux-specific版本稱為{%12})。這個系列中的所有接口都是關于I/O的——允許單個thread有效地等待多個文件描述符,直到其中一個文件描述符準備好讀取或寫入,然后當其中一個FD準備好對其進行工作時被喚醒。因此,這與您的一行代碼無關;這是一行Python standard-library代碼。具體來說,它在等待I/O——無論是磁盤還是網絡都不清楚,但基本上,它要么等待數據進入,要么等待網絡連接(或磁盤)停止忙碌,以便發送(或寫入)數據;特別是在一個上下文中,單個thread可能被調用來處理與多個文件或網絡連接中的任何一個相關的事件。
一般來說,這不是代碼慢的地方,而是代碼在等待其他東西的地方。