The interactive mode of matplotlib is slow. If you want to visualize the calculation results on a regular basis, you want to avoid blocking the main calculation while drawing.
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)
Let Worker
execute the calculation, and receive the calculation result through Queue
and draw it every time the calculation is completed.