Pythonでマルチプロセッシングプログラムをデバッグする際の良い習慣は何ですか?
Pythonでマルチプロセッシングプログラムをデバッグする際の良い習慣は何ですか?
回答:
真のマルチプロセッシングPythonプログラム(恐ろしいGILを処理しなければならないマルチスレッド Pythonプログラムとは対照的に)は、他のどの言語のプログラムとも違いはありません。それらはすべて同じ基本的な課題を持っています:
これらの各問題を回避しようとする開発方法がありますが、結局のところ、あなたは本当に自分が何をしているのかを考える必要があります。大規模なデモの途中や実稼働中とは対照的に、これらの機会の窓にぶつかり、開発中に爆発する可能性が十分にあるように、実際の生活で起こると思われるものをはるかに超える重いストレステストをお勧めします。
我々はマイクロ秒、タイムスタンプのログファイルを使用するために使用して、我々ができるようアプリを表示して色分けされたログを作成してみてください Mプロセッサ上で実行されているNプロセスの間起こっていたものを視覚化します。また、クラッシュのコンテキストを再作成するためにログファイルを削除するシステムを作成することも試みました(そしてほとんど成功しました)。
しかし、最良のツールは優れたデザインであり、アプリを水中から吹き飛ばそうとする本当に邪悪で厄介な人々です。(こんにちは、ベル!)
私が非常に役立つと思うことの1つは、multiprocessing
モジュールで既存のロガーを使用することです。あなたのメインコードでこれを試してください:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
参照:http : //docs.python.org/library/multiprocessing.html#logging
さらに、次を使用して現在のプロセス名にアクセスできます。
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
参照:http : //docs.python.org/library/multiprocessing.html#multiprocessing.current_process
それ以外は、pdb
&coのような標準のデバッグ方法以外には何も知りません。