[fpr 3835] Pythonの速さ

Yasuharu Okamoto


岡本安晴@日本女子大学心理学科です。

PsychoPyのdocument(http://www.psychopy.org/documentation.htmlからダウンロー
ド可)で
時間の精度についての説明がありますが、モニターの時間制御(p. 25)だけが扱わ
れているようです。
例えば、Windowsの場合、マルチタスクによるディレイが実行中に入ってきます。こ
れは
私のチェックしたノートパソコンの場合、16msec弱でした。チェックに用いたスク
リプトは
以下のものです。
from datetime import datetime

def get_MicroSec():
    now = datetime.now()
    return now.microsecond + 1000000.0 * (now.second + 60.0 * (now.minute \
                            + 60.0 * now.hour))

check_time = [0]*100
t0 = 0
t_start = get_MicroSec()
t1 = get_MicroSec()
for i in range(100):
    t0 = t1
    t1 = get_MicroSec()
    check_time[i] = t1 - t0

for i in range(100):
    print("{0:10}".format(check_time[i]), end='')

t_end = get_MicroSec()
print("\n\nt_end - t_start = {0}microsecond\n\n".format(t_end - t_start))

t0 = 0
t1 = get_MicroSec()
pos = 0
while(pos < 100):
    t0 = t1
    t1 = get_MicroSec()
    if t1 > t0:
        check_time[pos] = t1 - t0
        pos += 1

for i in range(100):
    print("{0:10}".format(check_time[i]), end='')
私のノートパソコンでの実行結果は以下のようになります。
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit
(Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
============ RESTART: M:/PythonSamples_1/CheckTime/CheckTime_1.py
============
       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
0.0       0.0       0.0       0.0       0.0

t_end - t_start = 453072.0microsecond


   15617.0   15625.0   15625.0   15624.0   15626.0   15626.0   15624.0
15627.0   15626.0   15625.0   15642.0   15606.0   15628.0   15641.0   15607.
0   15643.0   15604.0   15629.0   15644.0   15624.0   15604.0   15624.0
15627.0   15644.0   15625.0   15604.0   15625.0   15624.0   15628.0   15623.
0   15628.0   15624.0   15625.0   15629.0   15619.0   15647.0   15625.0
15608.0   15624.0   15643.0   15625.0   15624.0   15625.0   15608.0   15629.
0   15639.0   15625.0   15625.0   15624.0   15608.0   15624.0   15625.0
15643.0   15604.0   15626.0   15643.0   15628.0   15626.0   15624.0   15625.
0   15625.0   15608.0   15642.0   15624.0   15605.0   15628.0   15621.0
15624.0   15628.0   15626.0   15627.0   15622.0   15627.0   15621.0   15646.
0   15608.0   15624.0   15625.0   15643.0   15604.0   15627.0   15626.0
15643.0   15611.0   15620.0   15643.0   15626.0   15625.0   15626.0   15624.
0   15608.0    1232.0    4002.0     288.0     326.0    4002.0    1820.0
15644.0   15604.0   15624.0
>>>
前半の0が並んでいるのは、forループの1回当たりの経過時間が0microsecondであ
ることを意味しています。
単純な処理であれば無視できる時間で実行されていると考えられます。
前半全体(100回の繰り返し)の時間は
t_end - t_start = 453072.0microsecond
となっていて、約0.5秒です。
後半の16msecの数字は、マルチタスクによる遅れです。タスクの処理が切り替わっ
て戻ってきたときには16msec経っているということです。
Windowsパソコンで実験制御するときは、このタスクの切り替えのため16msecの遅
れが入ることがあるということは注意しておく必要があると思います。

横浜市在住
岡本安晴




スレッド表示 著者別表示 日付順表示 トップページ
["

\e$B$3$3$O\e(B\e$B?4M}3X8&5f$N4pAC%a!<%j%s%0%j%9%H\e(B\e$B$KEj9F$5$l$?2a5n$N5-;v$r7G:\\$7$F$$$k%Z!<%8$G$9!#\e(B

\n", "\n"]