birden çok iş parçacığı aynı anda çizimi. Bu amaçla, yapmayı planladığım her arsa için bir iplik başlarım.Matplotlib: Ben çabuk büyük toplu işleri bitirmek için paralel bazı komplo yapmaya çalışıyorum
Her iş parçacığı kendi komplo bitirip kendisini kapatmak edeceğini umduğu (Anladığım kadarıyla onlar vadede bütün tabloların yoluyla olsun, Python konuları kapatır()). Aşağıda bu davranışı gösteren bir kod var. bir figür oluşturur çizgi dışarı yorum Eğer beklendiği gibi
, bu çalışır. Bir başka makul yardımcı tidbit, sadece bir iş parçacığı oluşturduğunuzda beklendiği gibi çalıştığıdır.
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()
Herhangi bir yardım için teşekkür ederiz.
Aslında yanlış giderse ne dedi değil ettik, bu gibi sesler rağmen Bir çeşit iş ortaklığı eşzamanlılığı sorunu. –
Neyin yanlış gittiğinden emin değilim. Hiçbir hata alamıyorum ve bir python işlemi devam ediyor. Ayrıca, her saniye kapalı olan ana iş parçasındaki yazdırma ifadesi, ilk saniyeden sonra bunu yapmaz. Görev yöneticisine bir bakış, işlemin bir çok CPU'yu kullanmaya devam ettiğini gösterir. Maalesef, ciddi hata ayıklama konusunda sınırlı tecrübem var. – Boris
MakeTapHist(). Start() 'işlevini birden çok kez çağırmak mı istiyorsunuz? Görünüşe göre belki de döngü dışında olmalı. –