Существует два способа создания и установки Python в Mac OS X. Один из них является традиционной стандартной библиотекой Unix-y. Другой известен как установка framework
, макет файла, аналогичный другим фреймворкам на OS X, где все каталоги компонентов (include
, lib
, bin
) для продукта установлены как подкаталоги под основной каталог. Проект Fink
устанавливает Pythons с использованием метода общей библиотеки Unix. Большинство других дистрибьюторов, включая поставляемые Apple Pythons в OS X, установщики python.org
и MacPorts
, устанавливают framework
версии Python. Одним из преимуществ установки системы является то, что она будет работать правильно с различными вызовами API OS X, для которых требуется соединение с диспетчером окон (обычно это интерфейсы, связанные с GUI), потому что интерпретатор Python упакован как пакет приложений в рамках.
Если вам нужны функции в matplotlib, которые требуют функций GUI, самым простым подходом может быть переход на MacPorts, который также упаковывает matplotlib (port py27-matplotlib
) и его зависимости. Если да, будьте осторожны, чтобы не смешивать пакеты между Fink
и MacPorts
. Лучше придерживаться того или другого, если вы не очень осторожны. Соответственно отрегулируйте путь к оболочке; было бы безопаснее удалить все пакеты Fink и установить версии MacPorts.
clock()
измеряет время процессора, используемое вашим процессом, а не время настенных часов. Если у вас несколько потоков, работающих одновременно, вы можете, очевидно, сжечь процессорное время намного быстрее.
Если вы хотите узнать время выполнения настенных часов, вам нужно использовать соответствующую функцию. Единственный в ANSI C - time()
, который обычно имеет только 1-секундное разрешение.
Однако, как вы уже сказали, вы используете POSIX, это означает, что вы можете использовать clock_gettime()
, определенный в time.h
. Для этого лучше всего использовать часы CLOCK_MONOTONIC
:
struct timespec start, finish;
double elapsed;
clock_gettime(CLOCK_MONOTONIC, &start);
/* ... */
clock_gettime(CLOCK_MONOTONIC, &finish);
elapsed = (finish.tv_sec - start.tv_sec);
elapsed += (finish.tv_nsec - start.tv_nsec) / 1000000000.0;
(обратите внимание, что я тщательно выполнил расчет elapsed
, чтобы гарантировать, что точность не теряется при очень коротких интервалах времени ).
Если ваша ОС не предоставляет CLOCK_MONOTONIC
(которую вы можете проверить во время выполнения с sysconf(_SC_MONOTONIC_CLOCK)
), вы можете использовать CLOCK_REALTIME
как резервную копию, но обратите внимание, что последний имеет что он будет генерировать неверные результаты, если системное время будет изменено во время работы вашего процесса.
Какое временное разрешение вам нужно? Вы можете использовать time () с time.h для второго разрешения. Если вам требуется более высокое разрешение, вы можете использовать что-то более специфичное для системы. См. Функцию Timer для предоставления времени в nano секундах с использованием C ++
elapsed
? Есть ли какое-то значение для использования двух отдельных операторов вместо объединения их в одно задание? – sevko 4 December 2016 в 18:47clock()
действительно измеряет время настенных часов в MSVC. – Nik-Lz 17 February 2017 в 16:38