GNU/Linux >> Belajar Linux >  >> Linux

Cara tercepat untuk mendapatkan waktu aktif sistem dengan Python di Linux

Saya tidak berpikir Anda bisa mendapatkan lebih cepat daripada menggunakan ctypes untuk memanggil sysinfo() tetapi dalam pengujian saya, ini lebih lambat dari / proc. Pemrogram sistem linux itu sepertinya tahu apa yang mereka lakukan!

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

Menjalankan dua pengujian Anda ditambah pengujian saya di laptop lambat saya, saya mendapatkan:

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

PEMBARUAN

Sebagian besar waktu dihabiskan untuk menarik libc dan membuat buffer. Jika Anda berencana untuk melakukan panggilan berulang kali dari waktu ke waktu, Anda dapat menarik langkah-langkah tersebut dari fungsi dan mengukur panggilan sistem saja. Dalam hal ini, solusi ini adalah pemenang yang jelas:

uptime1: 5.066633300986723
uptime2: 0.11561189399799332
uptime3: 0.007740753993857652

Anda dapat mencoba memasang psutil dengan:

pip install psutil

lalu gunakan penggalan kode berikut:

import psutil
import time


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


print seconds_elapsed()

Terus terang ini sepertinya solusi yang jauh lebih baik:

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

    return uptime_seconds

Ini juga memiliki manfaat tambahan karena tidak memerlukan modul tambahan apa pun.

Kredit:Sumber


Linux
  1. Ambil tangkapan layar melalui skrip Python di Linux

  2. riwayat waktu aktif linux

  3. Cara mendapatkan lebar jendela konsol Linux dengan Python

  1. Dapatkan waktu pembuatan file dengan Python di linux

  2. cara tercepat mengonversi file yang dibatasi tab ke csv di linux

  3. Cara terbaik untuk mendapatkan id mesin di Linux?

  1. Cara Memeriksa Uptime Sistem di Linux

  2. Instal AzCopy di Linux – Cara tercepat untuk menyalin di Azure

  3. Bandingkan dua gambar dengan cara python/linux