Was sind einige bewährte Methoden zum Debuggen von Multiprozessor-Programmen in Python?
Was sind einige bewährte Methoden zum Debuggen von Multiprozessor-Programmen in Python?
Antworten:
Echte Multiprocessing-Python-Programme (im Gegensatz zu Multithread- Python-Programmen, die sich mit der gefürchteten GIL auseinandersetzen müssen ) unterscheiden sich nicht von denen in einer anderen Sprache. Sie alle haben die gleichen grundlegenden Herausforderungen:
Obwohl es Entwicklungsmethoden gibt, die versuchen, jedes dieser Probleme zu vermeiden, müssen Sie am Ende des Tages wirklich darüber nachdenken, was Sie tun. Ich empfehle intensiven Stresstest - weit über alles hinaus, was im wirklichen Leben passieren könnte -, damit Sie die Chance haben, diese Windows of Opportunity zu erreichen und in der Entwicklung in die Luft zu jagen, anstatt mitten in einer großen Demo oder während der Produktion.
Früher verwendeten wir Protokolldateien mit Mikrosekunden-Zeitstempeln und erstellten dann eine App zum Anzeigen von farbcodierten Protokollen, um zu visualisieren, was zwischen N Prozessen auf M Prozessoren passierte. Wir haben auch versucht (und meistens geschafft), ein System zu erstellen, das die Protokolldateien vertreibt, um den Kontext des Absturzes wiederherzustellen.
Aber das beste Werkzeug ist gutes Design und wirklich böse, böse Leute, die versuchen, Ihre App aus dem Wasser zu jagen. (Hallo, Blödmann!)
Eine Sache, die ich sehr hilfreich finde, ist die Verwendung des vorhandenen Loggers im multiprocessing
Modul. Versuchen Sie dies in Ihrem Hauptcode:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
Siehe auch: http://docs.python.org/library/multiprocessing.html#logging
Darüber hinaus können Sie auf den aktuellen Prozessnamen zugreifen, indem Sie Folgendes verwenden:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
Siehe: http://docs.python.org/library/multiprocessing.html#multiprocessing.current_process
Abgesehen davon kenne ich nichts anderes als die Standard-Debugging-Methoden wie pdb
& co.