Python time.clock вызывает функцию C clock (3) - man clock
должен подтвердить, что она должна работать на BSD, поэтому я не знаю, почему она не работает для вас. Возможно, вы можете попытаться обойти эту явную ошибку в вашем порту Python, используя ctypes
для непосредственного вызова функции clock из библиотеки system C (если вы указали библиотеку как .so / .dynlib / .dll или любые другие динамические разделяемые библиотеки). вызываются на FreeBSD)?
time.time должен быть очень высокого разрешения, кстати, так как внутренне он вызывает gettimeofday (ну, в любом случае, в правильно построенном Python) - какое разрешение вы наблюдаете для него в вашей системе?
Редактировать : вот wat.c
, расширение, специфичное для BSD (протестировано только на моем Mac - извините, но у меня нет другого понимания BSD под рукой), чтобы обойти эту очевидную проблему порта FreeBSD :
#include "Python.h"
#include <sys/time.h>
static PyObject *
wat_time(PyObject *self, PyObject *args)
{
struct timeval t;
if (gettimeofday(&t, (struct timezone *)NULL) == 0) {
double result = (double)t.tv_sec + t.tv_usec*0.000001;
return PyFloat_FromDouble(result);
}
return PyErr_SetFromErrno(PyExc_OSError);
}
static PyMethodDef wat_methods[] = {
{"time", wat_time, METH_VARARGS,
PyDoc_STR("time() -> microseconds since epoch")},
{NULL, NULL} /* sentinel */
};
PyDoc_STRVAR(wat_module_doc,
"Workaround for time.time issues on FreeBsd.");
PyMODINIT_FUNC
initwat(void)
{
Py_InitModule3("wat", wat_methods, wat_module_doc);
}
А вот setup.py
для помещения в тот же каталог:
from distutils.core import setup, Extension
setup (name = "wat",
version = "0.1",
maintainer = "Alex Martelli",
maintainer_email = "aleaxit@gmail.com",
url = "http://www.aleax.it/wat.zip",
description = "WorkAround for Time in FreeBSD",
ext_modules = [Extension('wat', sources=['wat.c'])],
)
URL-адрес правильный, поэтому вы также можете получить эти два файла в архиве здесь .
Чтобы собрать и установить это расширение, python setup.py install
(если у вас есть разрешение на запись в вашей установке Python) или python setup.py build_ext -i
для записи wat.so в тот самый каталог, в который вы поместили исходники (а затем вручную переместите его где бы вы ни предпочли иметь его, но сначала попробуйте его, например, с python -c'import wat; print repr(wat.time())'
в том же каталоге, в котором вы его создали).
Пожалуйста, дайте мне знать, как он работает на FreeBSD (или любом другом варианте Unix с gettimeofday
! -) - если компилятор C жалуется на gettimeofday
, возможно, вы находитесь в системе, которая не хочет видеть второй аргумент, попробуйте без него! -).