मैं बड़ी बैच नौकरियों को जल्दी से समाप्त करने के समानांतर में कुछ साजिश करने की कोशिश कर रहा हूं। इस अंत में, मैं प्रत्येक प्लॉट के लिए एक थ्रेड शुरू करता हूं जिसे मैं बनाने की योजना बना रहा हूं।Matplotlib: एकाधिक धागे में एक साथ प्लॉटिंग
मुझे उम्मीद थी कि प्रत्येक धागा अपनी साजिश समाप्त कर देगा और खुद को बंद कर देगा (जैसा कि मैं इसे समझता हूं, पाइथन रन() में सभी कथनों के माध्यम से धागे को बंद करता है)। नीचे कुछ कोड है जो इस व्यवहार को दिखाता है।
यदि कोई आंकड़ा उत्पन्न करने वाली रेखा पर टिप्पणी की जाती है, तो यह अपेक्षा के अनुसार चलता है। एक और व्यावहारिक रूप से उपयोगी टिड्बिट यह है कि यह केवल एक धागे को जन्म देने पर अपेक्षित रूप से चलता है।
import matplotlib.pyplot as plt
import time
import Queue
import threading
def TapHistplots():
## for item in ['str1']:
# # it behaves as expected if the line above is used instead of the one below
for item in ['str1','str2']:
otheritem = 1
TapHistQueue.put((item, otheritem))
makeTapHist().start()
class makeTapHist(threading.Thread):
def run(self):
item, otheritem = TapHistQueue.get()
fig = FigureQueue.get()
FigureQueue.put(fig+1)
print item+':'+str(fig)+'\n',
time.sleep(1.3)
plt.figure(fig) # comment out this line and it behaves as expected
plt.close(fig)
TapHistQueue = Queue.Queue(0)
FigureQueue = Queue.Queue(0)
def main():
start = time.time()
"""Code in here runs only when this module is run directly"""
FigureQueue.put(1)
TapHistplots()
while threading.activeCount()>1:
time.sleep(1)
print 'waiting on %d threads\n' % (threading.activeCount()-1),
print '%ds elapsed' % (time.time()-start)
if __name__ == '__main__':
main()
किसी भी मदद की सराहना की जाती है।
कुछ प्रकार के थ्रेड समरूपता मुद्दे। –
मुझे वास्तव में यकीन नहीं है कि क्या गलत है। मुझे कोई त्रुटि नहीं मिलती है और एक अजगर प्रक्रिया चल रही है। साथ ही, मुख्य थ्रेड में प्रिंट स्टेटमेंट जो हर सेकेंड से बाहर निकलना चाहिए, पहले दूसरे के बाद ऐसा नहीं करता है। टास्क मैनेजर में एक नज़र से पता चलता है कि प्रक्रिया बहुत सी सीपीयू का उपयोग जारी रखती है। दुर्भाग्यवश, गंभीर डीबग में मेरा सीमित अनुभव है। – Boris
क्या यह आपके इरादे को 'makeTapHist()। प्रारंभ() 'एकाधिक बार कॉल करने का इरादा है? ऐसा लगता है कि यह लूप के बाहर होना चाहिए। –