ओपी ने matplotlib
भूखंडों के बारे में पूछा । अधिकांश जवाब एक अजगर दुभाषिया के भीतर से आदेश निष्पादन लगता है। यहाँ प्रस्तुत उपयोग-केस एक टर्मिनल (जैसे bash) में परीक्षण कोड के लिए मेरी प्राथमिकता है, जहाँ a file.py
को चलाया जाता है और आप चाहते हैं कि प्लॉट (s) ऊपर आए, लेकिन अजगर स्क्रिप्ट को पूरा करने और कमांड प्रॉम्प्ट पर लौटने के लिए।
यह स्टैंड-अलोन फ़ाइल multiprocessing
डेटा के साथ साजिश रचने के लिए एक अलग प्रक्रिया शुरू करने के लिए उपयोग करती है matplotlib
। मुख्य धागा इस पोस्ट os._exit(1)
में उल्लिखित का उपयोग करके बाहर निकलता है । बलों से बाहर निकलें लेकिन पत्तियों को मुख्यos._exit()
matplotlib
बच्चे प्रक्रिया जीवित और उत्तरदायी तक भूखंड खिड़की बंद है। यह पूरी तरह से एक अलग प्रक्रिया है।
यह दृष्टिकोण मैटलैब डेवलपमेंट सेशन की तरह है, जिसमें फिगर विंडो एक उत्तरदायी कमांड प्रॉम्प्ट के साथ आती हैं। इस दृष्टिकोण के साथ, आपने आंकड़ा विंडो प्रक्रिया के साथ सभी संपर्क खो दिए हैं, लेकिन, यह विकास और डीबगिंग के लिए ठीक है। बस खिड़की बंद करें और परीक्षण रखें।
multiprocessing
अजगर-केवल कोड निष्पादन के लिए डिज़ाइन किया गया है जो इसे शायद बेहतर से बेहतर बनाता है subprocess
। multiprocessing
क्रॉस-प्लेटफ़ॉर्म है, इसलिए इसे विंडोज या मैक में बहुत कम या बिना किसी समायोजन के साथ काम करना चाहिए। अंतर्निहित ऑपरेटिंग सिस्टम की जांच करने की कोई आवश्यकता नहीं है। यह 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()
करके समस्या को हल करता है।