Python'daki çok işlemcili programlarda hata ayıklamanın bazı iyi uygulamaları nelerdir?
Python'daki çok işlemcili programlarda hata ayıklamanın bazı iyi uygulamaları nelerdir?
Yanıtlar:
Gerçek çok işlemli Python programları ( korkunç GIL ile uğraşmak zorunda olan çok iş parçacıklı Python programlarının aksine ) diğer dillerdekinden farklı değildir. Hepsi aynı temel zorluklara sahiptir:
Bu sorunların her birini önlemeye çalışan geliştirme yöntemleri olmasına rağmen, günün sonunda gerçekten ne yaptığınızı düşünmeniz gerekir. Ağır stres testlerini öneririm - gerçek hayatta olabileceğini düşündüğünüz her şeyin çok ötesinde - bu Fırsat Pencerelerini vurmak ve büyük bir demonun ortasında veya üretim sırasında aksine gelişimde patlamak için iyi bir şansınız var.
Biz mikrosaniye-timestamped günlük dosyalarını kullanmak için kullanılan ve biz böylece daha sonra renk kodlu günlük görüntüleme uygulaması oluşturulan denemek M işlemciler üzerinde çalışan N süreci arasında neler olduğunu görselleştirmek için. Ayrıca, kilitlenme bağlamını yeniden oluşturmak için günlük dosyalarını kapatacak bir sistem oluşturmayı denedik (ve çoğunlukla başarılı olduk).
Ancak en iyi araç, iyi tasarım ve uygulamanızı sudan çıkarmaya çalışan gerçekten kötü, kötü insanlar. (Selam, halter!)
Çok yararlı bulduğum bir şey, multiprocessing
modülde mevcut kaydediciyi kullanmak . Bunu ana kodunuzda deneyin:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
Ayrıca bkz: http://docs.python.org/library/multiprocessing.html#logging
Ayrıca, geçerli işlem adına aşağıdakileri kullanarak erişebilirsiniz:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
Bkz. Http://docs.python.org/library/multiprocessing.html#multiprocessing.current_process
Bunun dışında pdb
& co gibi standart hata ayıklama yöntemleri dışında başka bir şey bilmiyorum .