o programa assíncrono matplotlib show () ainda congela o programa

eu desejoexecutar uma simulação enquanto nomesmo tempo, produz seu progresso em um enredo. Venho analisando muitos exemplos de encadeamento e multiprocessamento, mas todos eles são bastante complexos. Então eu pensei com o novo Pythonasyncio biblioteca isso deve ser mais fácil.

Eu encontrei um exemplo (Como usar 'yield' dentro da função assíncrona?) e modificou-o para minha causa:

import matplotlib.pyplot as plt
import asyncio
import numpy as np


class DataAnalysis():
    def __init__(self):
        # asyncio so we can plot data and run simulation in parallel
        loop = asyncio.get_event_loop()
        try:
            loop.run_until_complete(self.plot_reward())
        finally:
            loop.run_until_complete(
                loop.shutdown_asyncgens())  # see: https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.AbstractEventLoop.shutdown_asyncgens
            loop.close()

    async def async_generator(self):
        for i in range(3):
            await asyncio.sleep(.4)
            yield i * i

    async def plot_reward(self):
        # Prepare the data
        x = np.linspace(0, 10, 100)

        # Plot the data
        plt.plot(x, x, label='linear')

        #plt.show()

        # add lines to plot
        async for i in self.async_generator():
            print(i)
            # Show the plot
            plt.show()


if __name__ == '__main__':
    DataAnalysis()
Pergunta, questão

Eu adicionei um simplesplt.show() e o programa ainda congela. Eu pensei comasyncio Eu poderia executá-lo em paralelo? Obviamente, meu conhecimento ainda está faltando. Um exemplo que faça o seguinte seria realmente útil:

Adicione uma linha a uma plotagem (dematplotlib) toda vezasync_generator retorna um valor.

questionAnswers(1)

yourAnswerToTheQuestion