簡體   English   中英

如何在 Python 中獲取線程執行時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM