Je n'avais pas de rapport à ce sujet, alors je vais déposer une note.
En Python, le module standard Multiprocessing vous permet d'effectuer des calculs parallèles. Le calcul parallèle matériel comme le GPU n'est pas pris en charge, il s'agit simplement d'un traitement multi-processus sur le CPU.
Les éléments de la liste d'arguments groupés sont passés aux arguments de la fonction que vous souhaitez traiter en parallèle.
Si vous écrivez un script qui fait référence à des variables globales dans une fonction qui est traitée en parallèle, ce sera comme suit.
example.py
import multiprocessing as mp
a = 0
def init_global():
global a
a = 100
def func(proc):
global a
print("Inside MultiProcess: ", proc, a)
return a
if __name__ == "__main__":
print("Before Change", a)
init_global()
print("After Change", a)
pool = mp.Pool(4)
callback = pool.map(func, range(4))
pool.terminate()
pool.join()
print(sum(callback))
résultat Comme vous pouvez le voir, vous pouvez faire référence et affecter dans une fonction normale (init_global), mais vous ne pouvez pas faire référence à une variable globale dans une fonction qui est traitée en parallèle.
Si vous voulez vraiment faire référence à la valeur de la variable globale dans la fonction de traitement parallèle, il semble que vous deviez spécifier l'argument de l'appelant. (Si vous souhaitez passer plusieurs arguments, vous devez générer un taple)
example.py
import multiprocessing as mp
a = 0
b = 1111
def init_global():
global a
a = 100
def func(proc):
print("Inside MultiProcess: ", proc[0], proc[1])
return proc[0]
if __name__ == "__main__":
print("Before Change", a)
init_global()
print("After Change", a)
pool = mp.Pool(4)
args = [(a,b) for i in range(4)]
callback = pool.map(func, args)
pool.terminate()
pool.join()
print(sum(callback))
résultat J'ai pu le remettre.
Il y a peut-être une méthode appropriée, mais je ne l'ai pas trouvée, alors veuillez indiquer s'il existe une meilleure méthode.
Recommended Posts