Le mode interactif de matplotlib est lent. Si vous souhaitez visualiser régulièrement les résultats du calcul, vous voulez éviter de bloquer le calcul principal lors du dessin.
test.py
import numpy as np
import matplotlib.pyplot as plt
import time
import multiprocessing as mp
class Worker(object):
def __init__(self, queue):
self.queue = queue
def loop(self):
while True:
obj = np.random.random((100, 100))
self.queue.put(obj)
time.sleep(1)
def __call__(self):
self.loop()
queue = mp.Queue()
worker = Worker(queue)
p = mp.Process(target=worker)
p.daemon = True
# initialize plot
plt.ion()
imshow = plt.imshow(np.random.random((100, 100)))
plt.show()
p.start()
while True:
obj = queue.get()
imshow.set_data(obj)
plt.draw()
plt.pause(0.0001)
Laisser Worker
exécuter le calcul, recevoir le résultat du calcul via Queue
et le dessiner à chaque fois que le calcul est terminé.