【问题标题】:How to run two function from same resource(plot graphic and saving infinite data to txt file)如何从同一资源运行两个函数(绘制图形并将无限数据保存到 txt 文件)
【发布时间】:2018-12-28 11:10:16
【问题描述】:

我是 Python 新手,尝试开发 gui 应用程序。我的数据源来自串口。当我按下按钮时,它应该绘制图形并将其打印在屏幕上并打印到新的 txt 文件。

我提到的以上所有内容都应该单独进行。

我的预期是:我怎样才能从同一资源同时运行保存数据和绘制多个图形

我使用了线程、time.sleep、wx.Timer。但我无法成功。任何人都可以帮助我吗?非常感谢。

【问题讨论】:

  • 欢迎来到 SO!请提供您的代码,以便用户可以帮助您,请参阅例如stackoverflow.com/help/mcve。另请参阅 stackoverflow.com/help/how-to-ask 如何提出好问题。
  • 从串行端口读取数据时,该进程有效地消耗了数据。该进程必须将and 绘图写入文本文件或绘图并存储或传递数据以供另一个进程写入文本文件。不能有 2 个进程从串口读取相同的数据。
  • 我也照你说的做了:(1)存储(从串口)到一个列表,(2)绘制存储的数据,(3)用三个 wxTimer 写入 txt 并删除。但是在 2 分钟后使用 matplotlib 绘图时它会冻结。当我将递归限制扩展到最大值时,它只持续了 6 分钟,然后一切都被击落而没有给出任何错误。然而纽维尔的建议不同的情节类型是 wxmplot 作品。我不明白为什么 matplotlib 会冻结。

标签: python multithreading serial-port wxpython pyserial


【解决方案1】:

您当然可以使用 wx.Timer 事件从串行端口获取最新数据。使用该数据,您可以将其流式传输到打开的文件并更新数据图表。

没有更详细的问题,很难给出详细的答案。但是,您可能会发现 wxmplot 库 (https://newville.github.io/wxmplot/) 很有用。公平地说,我是那个图书馆的主要作者。我使用它的其中一个功能与您的需求非常相似:来自外部源的数据的“实时更新图”,并且无需为每个新数据集重新创建新的 matplotlib 图。

您可能会发现https://github.com/newville/wxmplot/blob/master/examples/stripchart.py 中的示例是一个有用的示例。它具有模拟数据的功能,但您可以将其替换为“从串口读取”或获取其他数据源。

【讨论】:

  • 这是一个单独的问题和更长的主题。如果数据可预测且快速出现,wx.Timer 就足够了,就像我链接到的示例一样。如果 i/o 很慢,您可能想要使用线程或其他机制,这可能是来自串行端口的数据。我建议从 wx.Timer 开始,看看它是否足够好。
  • 数据每秒出现一次。我跳过了这个问题,现在我坚持使用新问题。问题是我的程序运行了 2 分钟,然后它给出了“堆栈溢出”错误。我使用 wx.Timer 将我的无限数据附加到列表并在绘图后将其删除。我不知道为什么它给出了那个错误。
  • 如前所述,这是一个完全不同的问题。它不能在 cmets 中解决。如果数据每秒都来,你不应该在两分钟内填满内存。请发布一个完整的示例和您获得的完整回溯作为一个单独的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多