Python 3.5 против 3.7 process_time - PullRequest
2 голосов
/ 05 марта 2019

Я вижу эту проблему только на моем iMac (macOS Mojave, версия 10.14.3). Мои компьютеры с Windows и Linux (CentOS) не имеют такой проблемы. Может ли кто-нибудь с iMac подтвердить это?

process_time время (время ЦП) в два раза больше, чем perf_counter (настенные часы) в однопоточной программе, когда я запускаю последнюю версию Python 3.7 для Mac OS:

$ python3.7 test.py

Python ('v3.7.2: 9a3ffc0492', '24 декабря 2018 02:44:43') Clang 6.0 (clang-600.0.57)

Процессорное время: 15,925813999999999 Настенные часы: 7,970086342 Расстояние: 750

Я не вижу той же проблемы с Python 3.5:

$ python3.5 test.py

Python ('v3.5.1: 37a07cee5969', '5 декабря 2015 21:12:44') GCC 4.2.1 (Apple Inc., сборка 5666) (точка 3)

Время ЦП: 8.09766 Настенные часы: 8.108357406000323 Расстояние: 750

Это ошибка в Python 3.7 или я чего-то не понимаю в process_time ?

Вот код, который я запускаю 'test.py':

import time
import sys
import platform

def distance(a, b):
    if a == b:
        return 0
    d = sys.maxsize
    for i, c in enumerate(a):
        d = min(d, ord(c) + distance(a[:i]+a[i+1:], b))
    for i, c in enumerate(b):
        d = min(d, ord(c) + distance(a, b[:i]+b[i+1:]))
    return d

print("Python", platform.python_build(), platform.python_compiler())
cpu = time.process_time()
clock = time.perf_counter()
d = distance("12345", "abcde")
clock = time.perf_counter() - clock
cpu = time.process_time() - cpu
print("CPU Time:", cpu, "Wall Clock:", clock, " Distance:", d)

код здесь

1 Ответ

0 голосов
/ 06 марта 2019

Да, это ошибка в двоичном дистрибутиве Python 3.7 и 3.8 для macOS из https://www.python.org загрузок:

    $ python3.8 test.py
    Python version : 3.8.0a2
           build   : ('v3.8.0a2:23f4589b4b', 'Feb 25 2019 10:59:08')
           compiler: Clang 6.0 (clang-600.0.57)
    CPU Time: 16.005979999999997 Wall Clock: 8.014987319  Distance: 750

Я получил исходный код от gitHub, скомпилированный на моем Mac споследний компилятор, и проблема исчезла:

    $ ./python.exe test.py
    Python version : 3.8.0a2+
           build   : ('heads/master:a9df651eb4', 'Mar  5 2019 17:21:48')
           compiler: Clang 10.0.0 (clang-1000.11.45.5)
    CPU Time: 7.2123870000000005 Wall Clock: 7.21903976  Distance: 750

Немного изменил программу 'test.py', чтобы правильно сообщать версию Python:

import time
import sys
import platform

def distance(a, b):
    if a == b:
        return 0
    d = sys.maxsize
    for i, c in enumerate(a):
        d = min(d, ord(c) + distance(a[:i]+a[i+1:], b))
    for i, c in enumerate(b):
        d = min(d, ord(c) + distance(a, b[:i]+b[i+1:]))
    return d

print("Python version :", platform.python_version())
print("       build   :", platform.python_build())
print("       compiler:", platform.python_compiler())
cpu = time.process_time()
clock = time.perf_counter()
d = distance("12345", "abcde")
clock = time.perf_counter() - clock
cpu = time.process_time() - cpu
print("CPU Time:", cpu, "Wall Clock:", clock, " Distance:", d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...