Apa sajakah praktik yang baik dalam debugging program multi-pemrosesan dengan Python?
Apa sajakah praktik yang baik dalam debugging program multi-pemrosesan dengan Python?
Jawaban:
Program Python multiprosesor yang sebenarnya (tidak seperti program Python multi- utas yang harus berurusan dengan GIL yang ditakuti ) tidak berbeda dari yang ada dalam bahasa lain. Mereka semua memiliki tantangan dasar yang sama:
Meskipun ada metode pengembangan yang mencoba menghindari masing-masing masalah ini, pada akhirnya Anda benar-benar perlu memikirkan apa yang Anda lakukan. Saya merekomendasikan pengujian stres berat - jauh melampaui apa pun yang Anda pikir mungkin terjadi dalam kehidupan nyata - sehingga Anda memiliki peluang bagus untuk mencapai Windows of Opportunity dan meledak dalam pengembangan dibandingkan dengan di tengah-tengah demo besar atau selama produksi.
Kami dulu menggunakan file log waktu-mikron dan kemudian membuat aplikasi tampilan kode warna sehingga kami bisa mencoba memvisualisasikan apa yang terjadi antara proses N yang berjalan pada prosesor M. Kami juga mencoba (dan sebagian besar berhasil) dalam menciptakan sistem yang akan mengusir file log untuk menciptakan kembali konteks crash.
Tetapi alat terbaik adalah desain yang bagus dan orang-orang jahat yang benar-benar jahat, yang mencoba mengeluarkan aplikasi Anda dari air. (Hai, dbell!)
Satu hal yang menurut saya sangat membantu, adalah menggunakan logger yang ada di multiprocessing
modul. Coba ini di kode utama Anda:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
Lihat juga: http://docs.python.org/library/multiprocessing.html#logging
Selain itu, Anda dapat mengakses nama proses saat ini menggunakan:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
Lihat: http://docs.python.org/library/multiprocessing.html#multiprocessing.current_process
Selain itu saya tidak tahu apa-apa selain metode debug standar seperti pdb
& co.