Pythonのクロック機能FreeBSD
-
12-09-2019 - |
質問
試験をしながらジャケット。時計()関数FreeBSDにのっても常に同じ値を返します、0.156
ます。time()機能が正常に動作が必要といってもいい出来になっているがやや高い。
なものC関数で合意思連絡が存する場合には代替の高分解能タイマー?
んのプロファイリングではTimeItモジュールによって適切にこちらです。
解決
ます。クロック()を返しますプロセッサます。では、どのくらいの時間を現在のプロセスが使用されるプロセッサーその場所には、Pythonスクリプトという"clock.py"、それは import time;print time.clock()
で実際に印刷約に同じ時までとして、新しい処理が開始されます。
こちらはpythonコンソールのログが説明を行っています:
>>> import time
>>> time.clock()
0.11
>>> time.clock()
0.11
>>> time.clock()
0.11
>>> for x in xrange(100000000): pass
...
>>> time.clock()
7.7800000000000002
>>> time.clock()
7.7800000000000002
>>> time.clock()
7.7800000000000002
いことを明らかとなる。
他のヒント
Pythonです。時計電話Cの機能はクロック(3)-- man clock
るかを確認する本イベントは終了いたしました。作BSD、なぜだかよくわかりませんかじめとする多数の機能がありますもしかしたらきを明らかにバグにPythonのポートを使用 ctypes
電話の時計機能のシステムのCライブラリを直接また図書館として。so/.dynlib/.dll などの動的共有ライブラリと呼ばれるFreeBSD)?
ます。時間が非常に高い分解能ちなみに、内部的に呼びかけられてい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が正しく使用できる必要がありますこれらのファイルはzip形式で圧縮まで こちらの.
構築&インストールこの拡張 python setup.py install
をする場合には、許可書にPythonのインスタレーション) python setup.py build_ext -i
書は、ワット.このディレクトリに入れますので、源として手動で移動でもお好みで、まずは試してみ例と python -c'import wat; print repr(wat.time())'
同じディレクトリで構築します。
みなさん、そしてどのような作品FreeBSD(その他のUnix味 gettimeofday
!-) --る場合のCコンパイラの警告を約 gettimeofday
, いますが、システムのない第二引数とみなし!-).
time.clock()
を返しまCPU時間UNIXシステム、wallclock時間からプログラム開始Windows上でしか利用できません。これは非常に残念insymmetry思います。
きの定義 time.time()
のPython源 こちらの (リンクコードをGoogle検索).その最高分解能タイマーを用による迅速Googlingは gettimeofday()
FreeBSDなど、させるためのマイクロ秒の精度クラスです。
ただし、本当に必要な精度を高め、見書をごCモジュールは本当に高い分解能のタイミング(うかを返し、現在のマイクロ秒数か!). パイレックス このPython拡張書面で非常に楽 SWIG は他の一般的な選択です。もったい場合には削り多くのマイクロ秒単位のオフタイマー精度、レビューを書いて、純粋なC Python拡張す。) Ctypesもオプションできなかったが、おそらくより遅くなります。
最高の実績があります。
ます。クロック()を実装を返すdouble値による
((double)clock()) / CLOCKS_PER_SEC
なぜだとお考えます。time()には悪いが分かりまこのgettimeofday、読み込み、ハードクロックは、非常に良い。