Ceci est une ancienne révision du document !
Programmation asynchrone
Threads
Lancement de threads
from threading import Thread class RunFuncAsync(Thread): def __init__(self, func, args): Thread.__init__(self) self.func = func self.args = args def run(self): self.func(self.args) threads = [] for _ in range(nb_of_threads): threads.append(RunFuncAsync(func, args)) for t in threads: t.start() for t in threads: t.join()
Verrous
from threading import RLock verrou = RLock() class ThreadClass(Thread): def run(self): with verrou: # section critique
Paralléliser un map
import multiprocessing from functools import partial def loop_function(j, param): # ... with multiprocessing.Pool(5) as p: raw_hist = p.map(partial(loop_function, param=param), range(n))
La fonction loop_function va s'exécuter sur chaque élément de la liste constituée par l'itérable range(n), représentés par le paramètre j. L'utilisation de partial permet juste de spécifier des paramètres. La fonction loop_function doit être en top module.