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)