GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Der schnellste Weg, um die Systemverfügbarkeit in Python unter Linux zu erhalten

Ich glaube nicht, dass Sie viel schneller werden können als mit ctypes um sysinfo() anzurufen aber in meinen Tests ist es langsamer als /proc. Diese Linux-Systemprogrammierer scheinen zu wissen, was sie tun!

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

Als ich Ihre beiden Tests plus meinen auf meinem langsamen Laptop ausgeführt habe, habe ich Folgendes erhalten:

>>> 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

AKTUALISIEREN

Die meiste Zeit wird damit verbracht, libc einzuziehen und Erstellen des Puffers. Wenn Sie den Aufruf im Laufe der Zeit wiederholt durchführen möchten, können Sie diese Schritte aus der Funktion herausziehen und nur den Systemaufruf messen. In diesem Fall ist diese Lösung der klare Gewinner:

uptime1: 5.066633300986723
uptime2: 0.11561189399799332
uptime3: 0.007740753993857652

Sie können versuchen, psutil zu installieren mit:

pip install psutil

und verwenden Sie dann das folgende Codefragment:

import psutil
import time


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


print seconds_elapsed()

Dies scheint offen gesagt eine viel bessere Lösung zu sein:

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

    return uptime_seconds

Es hat auch den zusätzlichen Vorteil, dass keine zusätzlichen Module erforderlich sind.

Danksagungen:Quelle


Linux
  1. dmidecode:Informationen zur Systemhardware unter Linux abrufen

  2. So überprüfen Sie die Systemverfügbarkeit in Linux

  3. Installieren Sie AzCopy unter Linux – die schnellste Methode zum Kopieren in Azure

  4. Machen Sie einen Screenshot über ein Python-Skript unter Linux

  5. am schnellsten konvertieren tabulatorgetrennte datei in csv in linux

Finden Sie Linux-Systemdetails mit Python

Tuptime – Ein CLI-Dienstprogramm zum Ermitteln der Betriebszeit von Linux-Systemen

So überwachen Sie die Betriebszeit von Linux-Systemen mit Uptimed

So überprüfen Sie die Betriebszeit auf einem Linux-Server

Dokumentieren der Systemverfügbarkeit in Linux

Linux-Runlevels richtig verstehen