2009-08-30 5 views
16

Je n'arrive pas à déboguer une application multiprocessus (en particulier en utilisant un pool de processus dans le module de multiprocessing de python). J'ai une impasse apparente et je ne sais pas ce qui la cause. La trace de la pile n'est pas suffisante pour décrire le problème, car elle affiche uniquement le code dans le module multitraitement.Techniques de débogage multitraitement

Existe-t-il des outils Python ou des techniques générales pour déboguer des blocages?

Répondre

31

Yah, le débogage des blocages est amusant. Vous pouvez définir le niveau de journalisation à être plus élevé - voir the Python documentation pour une description de celui-ci, mais très rapidement:

import multiprocessing, logging 
logger = multiprocessing.log_to_stderr() 
logger.setLevel(multiprocessing.SUBDEBUG) 

De plus, ajoutez l'enregistrement pour quelque chose dans votre code qui traite d'une ressource ou autres joyeusetés qui pourraient être contention. Enfin, tourné dans l'obscurité: engendrer des processus enfants lors d'une importation peut provoquer un problème.

+2

Oui, beaucoup de consignation, aussi médiocre soit-elle, reste la meilleure approche globale pour isoler et éventuellement localiser et corriger les problèmes d'interblocage ... d'où le +1. le multitraitement a des problèmes d'interblocage spécifiques avec sa file d'attente, qui sont bien documentés - vérifiez que vous ne les rencontrez pas, peut-être. –

3

Afin de éviter en premier lieu, l'apprentissage de bonnes pratiques est utile, car le traitement parallèle est en effet assez subtile. Le (gratuit) Little Book of Semaphores peut être une lecture très agréable!

Questions connexes