Часы высокой точности в Python

класс 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 () аналогично аннотируется. "

Итак, вам нужно связать контроллер с узлом и установить пользовательские данные для узла.

45
задан fuad 21 December 2009 в 03:41
поделиться

5 ответов

Стандартная функция 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
54
ответ дан 26 November 2019 в 20:55
поделиться

В той же 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 функция)

0
ответ дан 26 November 2019 в 20:55
поделиться

Вы также можете использовать time.clock (). Он подсчитывает время, используемое процессом в Unix, и время с момента первого обращения к нему в Windows. Он более точен, чем time.time ().

Это обычно используемая функция для измерения производительности.

Просто позвоните

import time
t_ = time.clock()
#Your code here
print 'Time in function', time.clock() - t_

EDITED: Упс, я пропускаю вопрос, так как вы хотите знать точное время, а не время потрачено ...

14
ответ дан 26 November 2019 в 20:55
поделиться

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 */
    }
}

(из http: // svn .python.org / view / python / trunk / Modules / timemodule.c? revision = 81756 & view = markup )

23
ответ дан 26 November 2019 в 20:55
поделиться

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)

4
ответ дан 26 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: