matplotlibのinteractive modeは遅い.定期的に計算結果を可視化するような場合,描画をする間にメインの計算がブロックされてしまうのを避けたい.
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)
Worker
に計算を実行させて,計算が終わる度にQueue
を通して計算結果を受け取って描画する.