W Pythonie 3.4.1 staram się zmierzyć, jak długo zajmuje funkcję do uruchomienia i zakończenia, a następnie nagrywanie go. Obecnie to robię:
starttime = time.clock()
asyncio.wait_for((method()), 5)
endtime = time.clock()
print(endtime - starttime)
Zwykle powoduje to Pythona wyplunia coś około 6.29989986222767E-06 (lub 0,00000629989986222767e). Potem próbowałem go z czasem.Sleep:
starttime = time.clock()
asyncio.wait_for((time.sleep(3)), 5)
endtime = time.clock()
print(endtime - starttime)
Ponownie zaowocowało 6.87261802845284E-06, mimo że (przynajmniej myślę), powinno zająć 3 sekundy. Próbowałem tego za pomocą wątków, z tym samym wynikiem. Co myślisz? Jak mogę zmierzyć, jak długo zajmuje funkcję do uruchomienia i zakończenia?
3 odpowiedzi
Generalnie używam tego dekoratora na czas moje funkcje:
import time
def timeit(method):
def timed(*args, **kw):
ts = time.time()
result = method(*args, **kw)
te = time.time()
print '%r (%r, %r) %2.2f sec' % \
(method.__name__, args, kw, te-ts)
return result
return timed
@timeit
def timeme():
time.sleep(3)
time.time()
Daje dokładniejsze czas dla benchmarków niż time.clock()
przede wszystkim dlatego, że time.clock()
mierzy czas procesora. time.time()
powróci sekundy przekazane od epoki (tj. Czas ściany), co jest potrzebne.
Albo możesz również użyć timeit
https://docs.Python.org/3 / filibrary/teeit.html.
W przypadku szybkich analiz wydajności używam następujących dwóch linii (plus import):
import time
import numpy as np
t = time.time()
# ...
print np.round_(time.time() - t, 3), 'sec elapsed'
Jest krótki, prosty i zazwyczaj potrzebuję.
(W większości przypadków i tak importowałem numpy
. Więc nie ma dla mnie nad głową.)
Przyznam, że nie jestem bardzo zaznajomiony z Asyyncio Pythona, ale wierzę, że problem nie jest w twoim czasie, ale w twoim użyciu asyncio
.
Myślę, że właśnie tworzysz przyszłość z wartością metody (), jednak to wszystko, co wystarczy: rzeczywiste tworzenie tej obietnicy.
Nie jest czas rzeczywistej oceny przyszłej wartości. Dlatego sen czasowy (3) i metoda () podejmuje mniej więcej tyle samo.
Proponuję próbować zmienić asyncio.wait_for((method()), 5)
za pomocą yield from asyncio.wait_for((method()), 3)
lub tylko timing method()
, jeśli możesz.
Podobne pytania
Powiązane pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.