OP hỏi về việc tháo gỡ matplotlibcác lô. Hầu hết các câu trả lời giả định thực thi lệnh từ bên trong một trình thông dịch python. Ca sử dụng được trình bày ở đây là ưu tiên của tôi để kiểm tra mã trong một thiết bị đầu cuối (ví dụ bash) trong đó a file.pyđược chạy và bạn muốn (các) cốt truyện xuất hiện nhưng tập lệnh python hoàn thành và quay lại dấu nhắc lệnh.
Tệp độc lập này sử dụng multiprocessingđể khởi chạy một quy trình riêng để vẽ dữ liệu matplotlib. Các chủ đề chính thoát ra bằng cách sử dụng os._exit(1)đề cập trong bài viết này . Các os._exit()lực lượng chính để thoát nhưng để matplotlibquá trình con sống và đáp ứng cho đến khi cửa sổ cốt truyện được đóng lại. Đó là một quá trình riêng biệt hoàn toàn.
Cách tiếp cận này hơi giống với phiên phát triển Matlab với các cửa sổ hình xuất hiện với dấu nhắc lệnh phản hồi. Với phương pháp này, bạn đã mất tất cả liên lạc với quy trình cửa sổ hình, nhưng, điều đó ổn cho việc phát triển và gỡ lỗi. Chỉ cần đóng cửa sổ và tiếp tục thử nghiệm.
multiprocessingđược thiết kế để thực thi mã chỉ python khiến nó có lẽ phù hợp hơn subprocess. multiprocessinglà đa nền tảng nên điều này sẽ hoạt động tốt trong Windows hoặc Mac với ít hoặc không cần điều chỉnh. Không cần phải kiểm tra hệ điều hành cơ bản. Điều này đã được thử nghiệm trên linux, Ubuntu 18.04LTS.
#!/usr/bin/python3
import time
import multiprocessing
import os
def plot_graph(data):
from matplotlib.pyplot import plot, draw, show
print("entered plot_graph()")
plot(data)
show() # this will block and remain a viable process as long as the figure window is open
print("exiting plot_graph() process")
if __name__ == "__main__":
print("starting __main__")
multiprocessing.Process(target=plot_graph, args=([1, 2, 3],)).start()
time.sleep(5)
print("exiting main")
os._exit(0) # this exits immediately with no cleanup or buffer flushing
Chạy file.pysẽ xuất hiện một cửa sổ hình, sau đó __main__thoát nhưng cửa sổ multiprocessing+ matplotlibhình vẫn phản hồi với các nút thu phóng, xoay và các nút khác vì đây là một quá trình độc lập.
Kiểm tra các quy trình tại dấu nhắc lệnh bash với:
ps ax|grep -v grep |grep file.py
ion()sửa lỗi.