Exécuter le mode interactif matplotlib de manière asynchrone

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é.

Recommended Posts

Exécuter le mode interactif matplotlib de manière asynchrone
Étendre le mode interactif de Python
Comment exécuter matplotlib sur heroku
Exécutez Matplotlib sur un conteneur Docker
exécuter le serveur uwsgi en mode uwsgi-gevent
Jusqu'à ce que matplotlib soit installé et exécuté