[英]How to get Thread execution time in Python
您好,我有一個執行 GET 請求的腳本,我需要測量加載了該 function 的線程。 這是我寫的代碼,但它沒有顯示正確的時間,它顯示 0 有時是 0.001 或類似的東西。
import requests
import threading
import time
def functie():
URL = "http://10.250.100.170:9082/SPVWS2/rest/listaMesaje"
r = requests.get(url = URL)
data = r.json()
threads = []
for i in range(5):
start = time.clock_gettime_ns()
t = threading.Thread(target=functie)
threads.append(t)
t.start()
end = time.clock_gettime_ns()
print(end-start)
我需要一個關於如何在我的代碼中獲取確切的線程執行時間的示例。 謝謝
此腳本中的代碼在主線程上運行,您正在嘗試測量線程 t 的時間。 為此,您可以告訴主線程等到線程 t 完成,如下所示:
import requests
import threading
import time
threads = []
start = []
end = []
def functie():
start.append(time.clock_gettime_ns())
URL = "http://10.250.100.170:9082/SPVWS2/rest/listaMesaje"
r = requests.get(url = URL)
data = r.json()
end.append(time.clock_gettime_ns())
for i in range(5):
start.append(time.clock_gettime_ns())
t = threading.Thread(target=functie)
threads.append(t)
t.start()
for (i,t) in enumerate(threads):
t.join()
print(end[i]-start[i])
另一個答案會產生不正確的結果。 如果第一個線程比第二個線程花費的時間長,那么第二個線程的時間將與第一個線程相同。 這是因為結束時間是在每次連接完成后按順序記錄的,而不是在線程的目標 function 實際完成時(可能是任何順序)。
更好的方法是使用執行此操作的代碼包裝線程的目標函數:
def thread_time(target):
def wrapper(*args, **kwargs):
st = time.time()
try:
return target(*args, **kwargs)
finally:
et = time.time()
print(et - st)
threading.currentThread().duration = et - st
return wrapper
def functie():
print "starting"
time.sleep(1)
print "ending"
t = threading.Thread(target=thread_time(functie))
t.start()
t.join()
print(t.duration)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.