класс javafx.scene.Node имеет пару методов setUserData (Object) и Object getUserData ()
, которые вы могли бы использовать для добавления вашей информации в узел.
So , вы можете вызвать page.setUserData (info);
И контроллер может проверить, задана ли информация. Кроме того, вы можете использовать ObjectProperty для пересылки данных назад, если это необходимо.
Соблюдайте документацию здесь: http://docs.oracle.com/javafx/2/api/javafx/fxml /doc-files/introduction_to_fxml.html Перед фразой «В первой версии handleButtonAction () помечен с помощью @FXML, чтобы разрешить разметку, определенную в документе контроллера, вызвать ее. Во втором примере поле кнопки аннотируется, чтобы позволить загрузчику устанавливать его значение. Метод initialize () аналогично аннотируется. "
Итак, вам нужно связать контроллер с узлом и установить пользовательские данные для узла.
Стандартная функция time.time ()
обеспечивает субсекундную точность, хотя эта точность зависит от платформы. Для Linux и Mac точность составляет + -
1 микросекунда или 0,001 миллисекунды. Python в Windows использует точность + -
16 миллисекунд из-за проблем с реализацией часов из-за прерываний процесса. Модуль timeit
может обеспечить более высокое разрешение, если вы измеряете время выполнения.
>>> import time
>>> time.time() #return seconds from epoch
1261367718.971009
Python 3.7 вводит новые функции в модуль time
, которые обеспечивают более высокое разрешение:
>>> import time
>>> time.time_ns()
1530228533161016309
>>> time.time_ns() / (10 ** 9) # convert to floating-point seconds
1530228544.0792289
В той же win10 системе ОС с помощью [1 119] "два отличных подхода метода" там, кажется, приблизительное "500 нс" разница во времени. Если Вы заботитесь о проверке точности наносекунды о моем коде ниже.
модификации кода основан на коде от пользователя cod3monk3y
и Kevin S
.
ОС: python 3.7.3 (default, date, time) [MSC v.1915 64 bit (AMD64)]
def measure1(mean):
for i in range(1, my_range+1):
x = time.time()
td = x- samples1[i-1][2]
if i-1 == 0:
td = 0
td = f'{td:.6f}'
samples1.append((i, td, x))
mean += float(td)
print (mean)
sys.stdout.flush()
time.sleep(0.001)
mean = mean/my_range
return mean
def measure2(nr):
t0 = time.time()
t1 = t0
while t1 == t0:
t1 = time.time()
td = t1-t0
td = f'{td:.6f}'
return (nr, td, t1, t0)
samples1 = [(0, 0, 0)]
my_range = 10
mean1 = 0.0
mean2 = 0.0
mean1 = measure1(mean1)
for i in samples1: print (i)
print ('...\n\n')
samples2 = [measure2(i) for i in range(11)]
for s in samples2:
#print(f'time delta: {s:.4f} seconds')
mean2 += float(s[1])
print (s)
mean2 = mean2/my_range
print ('\nMean1 : ' f'{mean1:.6f}')
print ('Mean2 : ' f'{mean2:.6f}')
результаты measure1:
nr, td, t0
(0, 0, 0)
(1, '0.000000', 1562929696.617988)
(2, '0.002000', 1562929696.6199884)
(3, '0.001001', 1562929696.620989)
(4, '0.001001', 1562929696.62199)
(5, '0.001001', 1562929696.6229906)
(6, '0.001001', 1562929696.6239917)
(7, '0.001001', 1562929696.6249924)
(8, '0.001000', 1562929696.6259928)
(9, '0.001001', 1562929696.6269937)
(10, '0.001001', 1562929696.6279945)
...
результаты measure2:
nr, td , t1, t0
(0, '0.000500', 1562929696.6294951, 1562929696.6289947)
(1, '0.000501', 1562929696.6299958, 1562929696.6294951)
(2, '0.000500', 1562929696.6304958, 1562929696.6299958)
(3, '0.000500', 1562929696.6309962, 1562929696.6304958)
(4, '0.000500', 1562929696.6314962, 1562929696.6309962)
(5, '0.000500', 1562929696.6319966, 1562929696.6314962)
(6, '0.000500', 1562929696.632497, 1562929696.6319966)
(7, '0.000500', 1562929696.6329975, 1562929696.632497)
(8, '0.000500', 1562929696.633498, 1562929696.6329975)
(9, '0.000500', 1562929696.6339984, 1562929696.633498)
(10, '0.000500', 1562929696.6344984, 1562929696.6339984)
Конечный результат:
Mean1: 0,001001 # (measure1 функция)
Mean2: 0,000550 # (measure2 функция)
Вы также можете использовать time.clock (). Он подсчитывает время, используемое процессом в Unix, и время с момента первого обращения к нему в Windows. Он более точен, чем time.time ().
Это обычно используемая функция для измерения производительности.
Просто позвоните
import time
t_ = time.clock()
#Your code here
print 'Time in function', time.clock() - t_
EDITED: Упс, я пропускаю вопрос, так как вы хотите знать точное время, а не время потрачено ...
Python изо всех сил пытается использовать функцию наиболее точного времени для вашей платформы для реализации time.time ()
:
/* Implement floattime() for various platforms */
static double
floattime(void)
{
/* There are three ways to get the time:
(1) gettimeofday() -- resolution in microseconds
(2) ftime() -- resolution in milliseconds
(3) time() -- resolution in seconds
In all cases the return value is a float in seconds.
Since on some systems (e.g. SCO ODT 3.0) gettimeofday() may
fail, so we fall back on ftime() or time().
Note: clock resolution does not imply clock accuracy! */
#ifdef HAVE_GETTIMEOFDAY
{
struct timeval t;
#ifdef GETTIMEOFDAY_NO_TZ
if (gettimeofday(&t) == 0)
return (double)t.tv_sec + t.tv_usec*0.000001;
#else /* !GETTIMEOFDAY_NO_TZ */
if (gettimeofday(&t, (struct timezone *)NULL) == 0)
return (double)t.tv_sec + t.tv_usec*0.000001;
#endif /* !GETTIMEOFDAY_NO_TZ */
}
#endif /* !HAVE_GETTIMEOFDAY */
{
#if defined(HAVE_FTIME)
struct timeb t;
ftime(&t);
return (double)t.time + (double)t.millitm * (double)0.001;
#else /* !HAVE_FTIME */
time_t secs;
time(&secs);
return (double)secs;
#endif /* !HAVE_FTIME */
}
}
time.clock()
имеет 13 десятичных точек в Windows, но только две в Linux.
time.time()
имеет 17 десятичных знаков в Linux и 16 в Windows, но фактическая точность отличается.
Я не согласен с документацией, что time.clock()
следует использовать для бенчмарков на Unix/Linux. Он недостаточно точен, поэтому то, какой таймер использовать, зависит от операционной системы.
В Linux разрешение времени высокое в time.time()
:
>>> time.time(), time.time()
(1281384913.4374139, 1281384913.4374161)
В Windows, однако, функция времени, похоже, использует последнее вызванное число:
>>> time.time()-int(time.time()), time.time()-int(time.time()), time.time()-time.time()
(0.9570000171661377, 0.9570000171661377, 0.0)
Даже если я пишу вызовы на разных строках в Windows, все равно возвращается одно и то же значение, так что реальная точность ниже.
Поэтому при серьезных измерениях необходимо выполнить проверку платформы (import platform, platform.system()
), чтобы определить, использовать ли time.clock()
или time.time()
.
(Проверено на Windows 7 и Ubuntu 9.10 с python 2.6 и 3.1)