แนวทางปฏิบัติที่ดีในการดีบักโปรแกรมหลายตัวประมวลผลใน Python คืออะไร
แนวทางปฏิบัติที่ดีในการดีบักโปรแกรมหลายตัวประมวลผลใน Python คืออะไร
คำตอบ:
โปรแกรม Python หลายตัวประมวลผลที่แท้จริง (ตรงข้ามกับโปรแกรม Python แบบมัลติเธรดซึ่งต้องจัดการกับGIL ที่หวั่นเกรง) จะไม่แตกต่างจากโปรแกรมภาษาอื่น ๆ พวกเขาล้วนมีความท้าทายพื้นฐานเหมือนกัน:
แม้ว่าจะมีวิธีการพัฒนาที่พยายามหลีกเลี่ยงปัญหาเหล่านี้ แต่สุดท้ายแล้วคุณต้องคิดจริงๆเกี่ยวกับสิ่งที่คุณทำ ฉันขอแนะนำการทดสอบความเครียดอย่างหนัก - เหนือสิ่งอื่นใดที่คุณคิดว่าอาจเกิดขึ้นในชีวิตจริง - เพื่อให้คุณมีโอกาสที่ดีที่จะกดปุ่ม Windows of Opportunity เหล่านั้นและระเบิดขึ้นในการพัฒนาซึ่งตรงข้าม
เราเคยใช้ไฟล์บันทึก microsecond-timestamped จากนั้นสร้างแอปดูบันทึกสีเพื่อให้เราสามารถลองจินตนาการถึงสิ่งที่เกิดขึ้นระหว่างกระบวนการ N ที่ทำงานบนโปรเซสเซอร์ M นอกจากนี้เรายังพยายาม (และประสบความสำเร็จเป็นส่วนใหญ่) ในการสร้างระบบที่จะขับออกจากไฟล์บันทึกเพื่อสร้างบริบทของความผิดพลาดอีกครั้ง
แต่เครื่องมือที่ดีที่สุดคือการออกแบบที่ดีและชั่วร้ายจริง ๆ คนที่น่ารังเกียจที่พยายามเป่าแอปของคุณออกจากน้ำ (สวัสดีเดล!)
สิ่งหนึ่งที่ฉันพบว่ามีประโยชน์มากคือใช้ตัวบันทึกที่มีอยู่ใน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