GNU/Linux >> Tutoriels Linux >  >> Linux

Le moyen le plus rapide d'obtenir la disponibilité du système en Python sous Linux

Je ne pense pas que vous puissiez aller beaucoup plus vite qu'en utilisant ctypes appeler le sysinfo() mais dans mes tests, c'est plus lent que /proc. Ces programmeurs système Linux semblent savoir ce qu'ils font !

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

En exécutant vos deux tests plus le mien sur mon ordinateur portable lent, j'ai :

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

MISE À JOUR

La plupart du temps est passé à saisir libc et créer le tampon. Si vous prévoyez de passer l'appel à plusieurs reprises au fil du temps, vous pouvez extraire ces étapes de la fonction et mesurer uniquement l'appel système. Dans ce cas, cette solution est clairement gagnante :

uptime1: 5.066633300986723
uptime2: 0.11561189399799332
uptime3: 0.007740753993857652

Vous pouvez essayer d'installer psutil avec :

pip install psutil

puis utilisez le fragment de code suivant :

import psutil
import time


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


print seconds_elapsed()

Cela semble franchement être une bien meilleure solution :

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

    return uptime_seconds

Il présente également l'avantage supplémentaire de ne nécessiter aucun module supplémentaire.

Crédits :Source


Linux
  1. Comment vérifier la disponibilité du système sous Linux

  2. Installez AzCopy sur Linux – Le moyen le plus rapide de copier dans Azure

  3. Prendre une capture d'écran via un script Python sous Linux

  4. historique de disponibilité de linux

  5. Comment obtenir la largeur de la fenêtre de la console Linux en Python

Trouver les détails du système Linux à l'aide de Python

Tuptime - Un utilitaire CLI pour trouver la disponibilité du système Linux

Comment surveiller la disponibilité du système Linux à l'aide d'Uptimed

Comment vérifier la disponibilité sur un serveur Linux

Documenter la disponibilité du système sous Linux

Comprendre les niveaux d'exécution Linux de la bonne façon