Ceci est une ancienne révision du document !
Python, bash et Multithreading
Script bash
Lancer un script bash avec nice 19 (faible priorité):
from subprocess import Popen resultat = Popen(["nice -n 19 bash nomduscript.sh"], shell = True) resultat.wait() if resultat.returncode == 0: print("Succes")
Tâche de fond
Cas de processus en tâche de fond et qui redonne la main au fil principal
from multiprocessing import Process def tache_en_fond(mes_vars): # Fait des trucs en tâche de fond if __name__ == '__main__': p = Process(target=tache_en_fond, args=(mes_vars),daemon=True) p.start() print("On continue le fil")
Multithreading
Le multithreading impose de décomposer plusieurs tâches dans plusieurs threads
https://pythonguides.com/python-threading-and-multithreading/
https://docs.python.org/3/library/threading.html
https://www.tutorialspoint.com/python/python_multithreading.htm
Gestion des processus et du loadaverage
Nombre de coeurs d'une machine
from psutil import cpu_count
# ou from os import cpu_count
cpu_count()
Récupérer le loadaverage
Le loadaverage se récupère facilement avec :
open("/proc/loadavg").readline().split(" ")[:3]
Et un petit script qui permet de lancer un truc quand la charge redescend.
import time #wait if load average is too high def load_average_wait(treshold=1): # If server is above the treshold value, wait for lower load before continue while float(open("/proc/loadavg").readline().split(" ")[:3][0])> treshold: time.sleep(10) # my script part that eat a lot... while True: # Encode video, is there anything else eating so much cpu in the universe ? encode_video() # wait if cpu start boiling... load_average_wait(1.5)