我希望能够同时在模拟运行时输出其进展情况的图表。我查看了很多关于线程和多进程的示例,但它们都相当复杂。因此我认为使用Python的新的asyncio库会更容易些。
我找到了一个示例(如何在异步函数中使用'yield'?),并对其进行了修改以适应我的需求:
我找到了一个示例(如何在异步函数中使用'yield'?),并对其进行了修改以适应我的需求:
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()
问题
我添加了一个简单的plt.show()
,但程序仍然会卡死。我以为用asyncio
可以并行运行它?显然我的知识还不够丰富。
一个能够实现以下功能的示例将非常有帮助:
- 每次
async_generator
返回一个值时,在图表(使用matplotlib
)中添加一条线。