s'il vous plaît dites-moi
Si vous donnez un argument approprié au main ci-dessous et que vous l'exécutez, le nombre de processus augmentera et la mémoire sera serrée, je veux donc éviter cela.
import multiprocessing
def score4abc(a,b):
score = a,b
return score
def wrapper_score4multi(args):
return score4abc(*args)
def main(a,foo):
for i in range(500):
pool = multiprocessing.Pool(32)
pool.map(wrapper_score4multi,[[a,b] for b in foo]#32 processus sont toujours à l'état R et les processus terminés restent à l'état S.
pool.close()
Pour le dire clairement, cela fait du bien de pouvoir tuer les processus restants avec une méthode de collage comme pool.kill ().
Quand je l'ai vérifié avec ps aux, le processus qui traitait en parallèle lors de l'exécution du code suivant est resté suspendu pendant un long moment, donc j'ai suspecté que c'était la cause. Selon le document officiel, il dit qu'il s'arrête avec Pool.terminate () et se termine avec Pool.close (), mais il reste parfaitement même après Pool.close (). J'ai oublié les détails, mais je ne peux pas utiliser Process pour transmettre plusieurs arguments à la fonction que je souhaite traiter en parallèle, et je pense que c'était difficile sans utiliser pool.map comme indiqué ci-dessous. De plus, si vous identifiez le processus et que vous le tuez dans le shell toutes les minutes, le nombre de processus se rétablira rapidement avec le temps (couche trop basse pour identifier la cause vous-même). Ce qui précède est compilé et exécuté par Cython. La version python de l'appelant principal ci-dessus est 2.7.3.