GNU/Linux >> Linux の 問題 >  >> Linux

Linux の Python でシステムの稼働時間を取得する最速の方法

ctypes を使用するよりもはるかに高速になるとは思わない sysinfo() を呼び出す しかし、私のテストでは、/proc よりも遅いです。それらの Linux システム プログラマーは、自分が何をしているかを知っているようです!

import ctypes
import struct

def uptime3():
    libc = ctypes.CDLL('libc.so.6')
    buf = ctypes.create_string_buffer(4096) # generous buffer to hold
                                            # struct sysinfo
    if libc.sysinfo(buf) != 0:
        print('failed')
        return -1

    uptime = struct.unpack_from('@l', buf.raw)[0]
    return uptime

低速のラップトップで 2 つのテストと私のテストを実行したところ、次の結果が得られました:

>>> print(timeit.timeit('ut.uptime1()', setup="import uptimecalls as ut", number=1000))
5.284219555993332
>>> print(timeit.timeit('ut.uptime2()', setup="import uptimecalls as ut", number=1000))
0.1044210599939106
>>> print(timeit.timeit('ut.uptime3()', setup="import uptimecalls as ut", number=1000))
0.11733305400412064

更新

ほとんどの時間は libc のプルに費やされます そしてバッファを作成します。時間をかけて繰り返し呼び出しを行う予定がある場合は、それらのステップを関数から取り出して、システム コールだけを測定できます。その場合、このソリューションが明らかに勝者です:

uptime1: 5.066633300986723
uptime2: 0.11561189399799332
uptime3: 0.007740753993857652

psutil をインストールしてみてください と:

pip install psutil

次に、次のコードの断片を使用します:

import psutil
import time


def seconds_elapsed():
    return time.time() - psutil.boot_time()


print seconds_elapsed()

率直に言って、これははるかに優れたソリューションのように思えます:

def get_uptime():
    with open('/proc/uptime', 'r') as f:
        uptime_seconds = float(f.readline().split()[0])

    return uptime_seconds

また、追加のモジュールを必要としないという利点もあります。

クレジット:ソース


Linux
  1. Linuxでシステムの稼働時間を確認する方法

  2. Linux に AzCopy をインストールする – Azure でコピーする最速の方法

  3. Python/Linux の方法で 2 つの画像を比較する

  1. dmidecode:Linuxでシステムハードウェア情報を取得する

  2. Python を使用してマウス デルタを取得します。 (Linux の場合)

  3. 最速の Linux システム コール

  1. Linux で Python スクリプトを使用してスクリーンショットを撮る

  2. Linux 稼働時間の履歴

  3. Python で Linux コンソール ウィンドウの幅を取得する方法