ОП запитує про відокремлення matplotlib
сюжетів. Більшість відповідей передбачає виконання команди з інтерпретатора python. Представлений тут випадок використання є моїм уподобанням для тестування коду в терміналі (наприклад, bash), де file.py
виконується a , і ви хочете, щоб сюжети (-и) з'явилися, але сценарій python завершився і повернувся до командного рядка.
Цей окремий файл використовується multiprocessing
для запуску окремого процесу для побудови даних за допомогою matplotlib
. Основна нитка виходить, використовуючи os._exit(1)
згадане в цій публікації. В os._exit()
силах основні для виходу , але залишає matplotlib
процес дитини живий і чуйною , поки вікно ділянки не буде закрито. Це цілком окремий процес.
Цей підхід дещо схожий на сеанс розробки Matlab з фігурними вікнами, які розробили чуйний командний рядок. При такому підході ви втратили будь-який контакт з процесом вікна фігури, але це нормально для розробки та налагодження. Просто закрийте вікно і продовжуйте тестувати.
multiprocessing
розроблений для виконання коду лише для python, що робить його, можливо, більш підходящим ніж subprocess
. multiprocessing
є крос-платформою, тому це повинно добре працювати в Windows або Mac з невеликим або ніяким налаштуванням. Немає необхідності перевіряти базову операційну систему. Це було протестовано на 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
Запуск file.py
піднімає вікно фігури, а потім __main__
виходить, але вікно фігури multiprocessing
+ matplotlib
залишається чутливим до масштабування, панорамування та інших кнопок, оскільки це незалежний процес.
Перевірте процеси в командному рядку bash за допомогою:
ps ax|grep -v grep |grep file.py
ion()
виправляє проблему.