> Modules non standards > Autres modules non standards > joblib
joblib
Serialisation
joblib permet de sauvegarder des structures de données dans un fichier pour pouvoir les recharger après (par exemple un modèle de machine learning). Plus efficace pour les structures numpy que pickle.
Utilisation de dump et load :
- ar1 = numpy.array([2, 3, 4]); ar2 = numpy.array([5, 6, 7]); joblib.dump([ar1, ar2], 'myFile.gz') : pour sauvegarder des structures de données.
- [ar1, ar2] = joblib.load('myFile.gz') : pour reloader les données (il faut avoir ce que l'on a sauvegardé bien sûr).
- si on a une seule valeur à dumper dans le fichier, on peut juste faire : joblib.dump(myVar, 'myFile.gz') puis myVar = joblib.load('myFile.gz')
Parallélisation
joblib permet de lancer des tâches en parallèle.
Exemple de lancement de tâches :
def myFunc(x, y):
print('starting for ' + str([x, y]))
time.sleep(5)
return x ** 2 + 2 * y
argsList = [(1, 2), (3, 4), (5, 6), (7, 8)]
result = joblib.Parallel(n_jobs = 2, prefer = 'processes')(joblib.delayed(myFunc)(*args) for args in argsList)
print(result)
- exécution de 2 tâches en parallèle.
- joblib.delayed permet de ne pas exécuter tout de suite la tâche, sinon, la première appelée ne permettrait pas de lancer le second job.
- on peut utiliser des process ou des threads, avec l'option : prefer = 'processes' ou prefer = 'threads'
- par défaut, ce sont des process qui sont lancés, mais on peut aussi lancer des threads : joblib.Parallel(n_jobs = 2, prefer = 'threads') (utile seulement si le Global Interpreter Lock ne bloque pas, soit parce la fonction fait beaucoup d'IO, soit parce qu'elle fait beaucoup de calculs dans une librairie externe comme numpy.
- result contient la liste des résultats renvoyés par la fonction.
- si une fonction renvoie une exception, les jobs sont interrompus et l'exception est renvoyée.
- joblib.Parallel(n_jobs = 20, return_as = 'generator')(joblib.delayed(myFunc)(*args) for args in argsList) : retourne un générateur qui renvoie les resultats dans l'ordre dans lequel les appels se font.
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert