Một số thực hành tốt trong việc gỡ lỗi các chương trình đa xử lý trong Python là gì?
Một số thực hành tốt trong việc gỡ lỗi các chương trình đa xử lý trong Python là gì?
Câu trả lời:
Các chương trình Python đa xử lý thực sự (trái ngược với các chương trình Python đa luồng phải xử lý GIL đáng sợ ) không khác với các chương trình trong bất kỳ ngôn ngữ nào khác. Tất cả đều có những thách thức cơ bản giống nhau:
Mặc dù có những phương pháp phát triển cố gắng tránh từng vấn đề này, vào cuối ngày bạn thực sự cần phải suy nghĩ về những gì bạn đang làm. Tôi khuyên bạn nên thử nghiệm căng thẳng nặng nề - vượt xa mọi thứ bạn nghĩ có thể xảy ra trong cuộc sống thực - để bạn có cơ hội đánh vào những Cơ hội đó và phát triển trái ngược với bản demo chính hoặc trong quá trình sản xuất.
Chúng tôi thường sử dụng các tệp nhật ký được đánh dấu thời gian microsecond và sau đó tạo ra một ứng dụng xem nhật ký được mã hóa màu để chúng tôi có thể cố gắng hình dung những gì đang xảy ra giữa quá trình N chạy trên bộ xử lý M. Chúng tôi cũng đã cố gắng (và chủ yếu là thành công) trong việc tạo ra một hệ thống giúp loại bỏ các tệp nhật ký để tạo lại bối cảnh của sự cố.
Nhưng công cụ tốt nhất là thiết kế tốt và những người thực sự độc ác, xấu xa, những người cố gắng thổi ứng dụng của bạn ra khỏi nước. (Xin chào, chuông!)
Một điều mà tôi thấy rất hữu ích, là sử dụng bộ ghi chép hiện có trong multiprocessing
mô-đun. Hãy thử điều này trong mã chính của bạn:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
Xem thêm: http://docs.python.org/l Library / multiprocessing.html#logging
Ngoài ra, bạn có thể truy cập tên quy trình hiện tại bằng cách sử dụng:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
Xem: http://docs.python.org/l Library / multiprocessing.html # multiprocessing.civerse_ process
Ngoài ra, tôi không biết bất cứ điều gì khác ngoại trừ các phương pháp sửa lỗi tiêu chuẩn như pdb
& co.