GNU/Linux >> Znalost Linux >  >> Linux

Nejrychlejší způsob, jak získat dostupnost systému v Pythonu v Linuxu

Nemyslím si, že můžete být mnohem rychlejší než pomocí ctypes pro volání sysinfo() ale v mých testech je pomalejší než /proc. Zdá se, že tito programátoři linuxových systémů vědí, co dělají!

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

Provedením vašich dvou testů plus mého na mém pomalém notebooku jsem dostal:

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

AKTUALIZACE

Většinu času tráví stahováním libc a vytvoření bufferu. Pokud plánujete volat opakovaně v průběhu času, můžete tyto kroky vyjmout z funkce a měřit pouze systémové volání. V tom případě je toto řešení jasným vítězem:

uptime1: 5.066633300986723
uptime2: 0.11561189399799332
uptime3: 0.007740753993857652

Můžete zkusit nainstalovat psutil s:

pip install psutil

a poté použijte následující fragment kódu:

import psutil
import time


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


print seconds_elapsed()

Toto se upřímně zdá jako mnohem lepší řešení:

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

    return uptime_seconds

Má také další výhodu v tom, že nevyžaduje žádné další moduly.

Kredity:Zdroj


Linux
  1. Nainstalujte AzCopy na Linux – nejrychlejší způsob kopírování v Azure

  2. Udělejte snímek obrazovky pomocí skriptu Python v systému Linux

  3. historie dostupnosti linuxu

  1. Jak získat šířku okna konzoly Linux v Pythonu

  2. Získejte čas na vytváření souborů s Pythonem na linuxu

  3. Získejte delty myši pomocí Pythonu! (v Linuxu)

  1. dmidecode:Získejte informace o systémovém hardwaru v systému Linux

  2. Jak zkontrolovat dostupnost systému v Linuxu

  3. Porovnejte dva obrázky způsobem python/linux