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ãoEu 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:
matplotlib
) toda vezasync_generator
retorna um valor.