asyncio matplotlib show() 仍然冻结程序

2024-02-20

我希望运行模拟当在同时在绘图中输出其进度。我一直在研究很多线程和多重处理的示例,但它们都非常复杂。所以我想用Python的新asyncio图书馆这应该更容易。

我找到了一个例子(如何在异步函数中使用“yield”? https://stackoverflow.com/questions/37549846/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()

Question

我添加了一个简单的plt.show()并且程序仍然冻结。我想与asyncio我可以并行运行它吗?显然我的知识还很缺乏。 执行以下操作的示例将非常有帮助:

  • 向绘图添加一条线(matplotlib) 每次async_generator返回一个值。

首先,我误解了 asyncio,它不会并行运行(使用 asyncio 进行并行任务 https://stackoverflow.com/questions/40558484/use-asyncio-for-parallel-tasks).

似乎唯一对我有用的是plt.pause(0.001) (使用 Matplotlib 以非阻塞方式绘图 https://stackoverflow.com/questions/28269157/plotting-in-a-non-blocking-way-with-matplotlib). plt.draw()打开一个窗口,但没有显示任何内容plt.show冻结程序。看起来plt.show(block=False)已弃用并使用plt.ion给出了程序结束时最终结果关闭的问题。还await asyncio.sleep(0.1)并没有让剧情划出一条线。

工作代码

import matplotlib.pyplot as plt
import asyncio
import matplotlib.cbook
import warnings
warnings.filterwarnings("ignore",category=matplotlib.cbook.mplDeprecation)


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()
            # keep plot window open
            plt.show()

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

    async def plot_reward(self):
        #plt.ion()  # enable interactive mode

        # receive dicts with training results
        async for i in self.async_generator():
            print(i)
            # update plot
            if i == 0:
                plt.plot([2, 3, 4])
            elif i == 1:
                plt.plot([3, 4, 5])

            #plt.draw()
            plt.pause(0.1)
            #await asyncio.sleep(0.4)


if __name__ == '__main__':
    da = DataAnalysis()

Notes

  • 但是您会收到一条已弃用的消息:python3.6/site-packages/matplotlib/backend_bases.py:2445: MatplotlibDeprecationWarning: Using default event loop until function specific to this GUI is implemented warnings.warn(str, mplDeprecation),您可以通过以下方式抑制:warnings.filterwarnings().

  • 我不确定是否asyncio对于我的用例来说实际上是必要的......

  • 之间的区别threading and multiprocessing对于有兴趣的人:多处理 vs 线程 Python https://stackoverflow.com/questions/3044580/multiprocessing-vs-threading-python

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

asyncio matplotlib show() 仍然冻结程序 的相关文章

  • Spark MLlib - 训练隐式警告

    我在使用时不断看到这些警告trainImplicit WARN TaskSetManager Stage 246 contains a task of very large size 208 KB The maximum recommend
  • 编辑 scikit-learn 决策树

    我想编辑 sklearn DecisionTree 例如改变条件或切割节点 叶子等 但似乎没有功能可以做到这一点 如果我可以导出到文件 编辑它以导入 如何编辑决策树 环境 Windows 10 python3 3 sklearn 0 17
  • Python:记录垃圾收集器

    我有一个 python 应用程序 有一些性能问题 我想将垃圾收集器的事件 特别是何时调用 添加到我的日志中 是否可以 thanks http docs python org library gc html gc set debug http
  • Python 遍历目录树的方法是什么?

    我觉得分配文件和文件夹并执行 item 部分有点黑客 有什么建议么 我正在使用Python 3 2 from os import from os path import def dir contents path contents list
  • Python 中的安全解除引用

    Groovy 有一个很好的安全取消引用运算符 这有助于避免 NullPointerExceptions variable method The method仅当以下情况时才会被调用variable is not null 有没有办法在 Py
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的
  • 使用 Scipy imsave 将 Numpy 数组保存到图像时保留未更改的数据

    使用 Scipy 保存二维 Numpy 数组 单个值 时toimage or imsave像素值与 Numpy 数组中的像素值不完全匹配 相反 在某些区域 主要是边缘 图像算法似乎使用某种插值 是否有一个选项可以停止插值并保留准确的数据 例
  • 在Python中创建一个新表

    我正在尝试从数控机床中提取数据 事件每毫秒发生一次 我需要过滤掉一些用管道 分隔的变量分隔符 PuTTy exe 程序生成的日志文件 我尝试阅读熊猫 但列不在同一位置 df pd read table data log sep 日志文件的一
  • Django 的 URL 覆盖率测试为 0%,为什么?

    使用姜戈鼻子 我对 URL 进行了测试 但 URL 覆盖率仍然为 0 为什么 python manage py 测试配置文件 这是我的报道 Name Stmts Miss Cover Missing profiles 0 0 100 pro
  • 如何修复错误“AttributeError:‘模块’对象在 python3 中没有属性‘客户端’?

    以下是我的代码 import http h1 http client HTTPConnection www bing com 我认为没问题 但是 python 给了我以下错误 AttributeError 模块 对象没有属性 客户端 我想知
  • 一行Python和SQLite代码,为什么需要加“,”? [复制]

    这个问题在这里已经有答案了 c execute INSERT INTO numbers VALUES random randint 0 100 如果我将上面的代码更改为 c execute INSERT INTO numbers VALUE
  • 在Python中删除带有重音符号的字符串中的所有非字母字符

    我正在尝试使用 Python 3 7 从包含重音符号的字符串中删除所有非字母字符 空格除外 我尝试了以下方法 import re text 29 1981 4 2008 clean text re sub W d text print cl
  • 在 matplotlib 中使用 yscale('log') 时缺少误差线

    在某些情况下 当使用对数刻度时 matplotlib 会错误地显示带有误差条的图 假设这些数据 例如在 pylab 内 s 19 0 20 0 21 0 22 0 24 0 v 36 5 66 814250000000001 130 177
  • 参数验证,Python 中的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 让我们举一个 API 的例子 def get abs directory self path if os path isdir path ret
  • 从 IMDbPy 结果中的片目中获取电影 ID

    我正在尝试创建一个数据集 允许我根据 Python IMDb API 中的演员 ID 和电影 ID 加入演员和电影 现在 我正在尝试从演员的电影作品中提取电影 ID 列表 但无法做到 例如 我知道 Rodney Dangerfield 在
  • numpy.cov() 返回意外的输出

    我有一个 X 数据集 有 9 个特征和 683 行 683x9 我想获取这个 X 数据集和另一个与 X 具有相同形状的数据集的协方差矩阵 我使用np cov originalData generatedData rowvar False 代
  • Django 接受 AM/PM 作为表单输入

    我试图弄清楚如何使用 DateTime 字段在 Django 中接受 am pm 作为时间格式 但我遇到了一些麻烦 我尝试在 forms py 文件中这样设置 pickup date time from DateTimeField inpu
  • 如何设置 matplotlib 表中列的背景颜色

    我在一个目录中有多个 txt 文件 例如 d memdump 0 txt 1 txt 10 txt 示例文本文件如下 Applications Memory Usage kB Uptime 7857410 Realtime 7857410
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • Python 枚举子集迭代

    我想迭代以下枚举的子集 class Items enum Enum item1 0 item2 1 item3 2 item4 3 item5 4 item6 5 item7 6 item8 7 说我想 for item in Items

随机推荐

  • 为什么我的“计数前导零”程序出现故障?

    以下代码返回 Hacker s Delight 书中的前导零的数量 include
  • 当我重命名项目时,Xcode 6.3 崩溃

    昨天我将 Xcode 更新到 6 3 版本 因为我的 iPhone 具有 8 3 软件版本 并且 Xcode 想要最新版本来运行该应用程序 现在一切都已更新 但 Xcode 无法再重命名该项目了 如果我复制该项目 然后打开它并在 身份 和
  • 如何将我的编译器与 eclipse 集成?

    我有一个使用 flex bison 和 C 编写的迷你编译器 我想在 eclipse 中使用它 就像使用java编译器一样 但我不知道如何做到这一点 所以我需要一些帮助和一些建议 Thanks 创建商业品质的 Eclipse IDE htt
  • 无法启动 net 6 + React 应用程序的 SPA 代理

    我正在创建一个基于 ASP NET CORE Web 应用程序 React 模板的新项目 然后我根据需要配置 ClientApp 我使用自己的 webpack config js 而不是 CRA 前端工作正常 当我运行它时它按预期启动npm
  • jQuery 启用/禁用显示/隐藏按钮和选择选项。获取剩余选项值

    我有一个使用文本字段中的值填充的选择列表 我还有两个按钮 一个添加按钮 用于将输入的值添加到选择列表中 一个删除按钮 用于从选择列表中删除输入的值 我想使用 jQuery 执行以下操作 如果在文本字段中输入的值为无法使用在选择列表中 显示添
  • PHP Curl 异步响应

    我有一个 PHP 文件 它通过curl 调用另一个PHP 文件 我试图让第二个文件向第一个文件发送响应 让它知道它已启动 问题是第一个不能等待第一个完成执行 因为这可能需要一分钟或更长时间 我需要它立即发送响应 然后继续处理常规业务 我尝试
  • Wordpress,为所有链接添加 标签

    当我在 WordPress 网站上撰写博客文章时 我想在所有锚标记内动态添加一个 span 标记 其数据属性与锚标记具有相同的值 Example 我在 WordPress 中写的内容 p Some text with a href a li
  • 在 TriggerDagRunOperator 中提供上下文

    我有一个 dag 它被另一个 dag 触发 我已经通过这个 dag 传递了一些配置变量DagRunOrder payload字典以同样的方式官方示例 https github com apache incubator airflow blo
  • 寻找最常见的组合

    我有一个包含 2 列 ID 号和品牌的数据框 X1 X2 1234 A89 1234 A87 1234 A87 1234 A32 1234 A27 1234 A27 1235 A12 1235 A14 1235 A14 1236 A32 1
  • swift2 中协议扩展的限制和默认值

    所以我在研究协议扩展时遇到了一个 有趣 的问题 我想写一个Meters and Kilometers用于测试某些东西的单元类型 作为一个类 它非常容易做到这一点 其中有一个基类 并且两个子类都覆盖基类 而只是覆盖一个简单的值 Convers
  • 使用 js.dart 公开 auth0 API

    我正在编写一个 Dart Angular2 应用程序 但它与当前的问题无关 我试图通过使用 1https pub dartlang org packages js 公开它的 API 来将 Auth0Lock 与 dart 一起使用 我正在使
  • 如何在 Mac OSX 上的 Qt 中使用 pkcs12/pfx 成功执行 SSL 加密?

    Qt 新手和开发跨平台应用程序 需要来自服务器和客户端的 SSL 身份验证基于 pem 的加密适用于 Linux Android Windows 然而 Mac OSX 存在问题 我们的代码如下所示 QFile privateKeyFile
  • UIButton:需要一个圆形点击区域

    好的 我有 6 个自定义 UIButton 他们的正常状态图像都是圆形图像 它们的间距相等 但所有圆圈都相互接触 自定义 UIbutton 其上有圆形图像 的问题在于该按钮的点击区域是方形的 并且该方形的角与其他自定义按钮的点击区域重叠 我
  • 使用 Rails 助手渲染部分内容

    根据我的理解 助手主要用于清理视图中某些特定于视图的逻辑 但是在我当前的新项目 遗留应用程序 中 我偶然发现了很多看起来像这样的助手 def itemprepare render partial gt items itemlist summ
  • Django 管理内联的国家/州/城市下拉菜单

    我有一个 BusinessBranch 模型的城市外键 我的城市模型还具有州和县模型的州和国家外键 我很难在 BusinessBranchInline 中显示州和国家 地区下拉菜单 实现这一目标的最佳方法是什么 如果下拉列表根据其父级的值来
  • 使用“mm”说明符格式化月份的 DateTime ToString 问题

    我在获取正确的格式时遇到问题 我期待 2013 10 但我得到的是 2013 00 为什么会这样 我该如何解决这个问题 DateTime dt DateTime Parse 2013 Oct 01 string str2 dt ToStri
  • 如何在 C# 中执行结构体内联初始化?

    我应该在我的任意结构中实现什么成员才能使以下分配成为可能 public struct MyStruct String s Int length MyStruct myStruct new MyStruct s Hello length 5
  • 如何在 ASP.NET Core 中返回 401 而不是 302?

    我试图让 ASP NET Core Identity 在用户未登录时返回 401 我添加了一个 Authorize 属性到我的方法 而不是返回 401 而是返回 302 我尝试了很多建议 但似乎没有任何效果 包括services Confi
  • 从 JComboBox 渲染器获取工具提示

    我有一个扩展 JPanel 的 ComboBox 渲染器并有两个标签 在这里 我需要在鼠标移至时显示工具提示图标标签仅有的 如果鼠标在标签项不应显示工具提示 import java awt Color import java awt Com
  • asyncio matplotlib show() 仍然冻结程序

    我希望运行模拟当在同时在绘图中输出其进度 我一直在研究很多线程和多重处理的示例 但它们都非常复杂 所以我想用Python的新asyncio图书馆这应该更容易 我找到了一个例子 如何在异步函数中使用 yield https stackover