【发布时间】:2017-10-25 02:32:53
【问题描述】:
我希望运行模拟,同时在绘图中输出其进度。我一直在查看很多线程和多处理的示例,但它们都非常复杂。所以我认为使用 Python 的新 asyncio 库应该会更容易。
我找到了一个示例 (How to use 'yield' inside async function?) 并出于我的原因对其进行了修改:
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)绘图添加一条线。
【问题讨论】:
标签: python python-3.x matplotlib python-asyncio