【问题标题】:What is a viable approach to receiving asynchronous sources of data for plotting with Chaco?接收异步数据源以使用 Chaco 绘图的可行方法是什么?
【发布时间】:2013-10-29 08:36:19
【问题描述】:

我正在探索EnthoughtTraits/TraitsUI/Chaco 软件包,因为我想使用强大的动态绘图工具。我有来自外部来源的数据,我希望用它来更新一组 Chaco 图。我研究了 spectrum.pydata_stream.py 示例,但它们会定期从重复的 Timer 事件的流/文件/源中提取数据,而不是接收异步输入事件。

我不清楚如何删除 Timer 而是异步触发 Array 更新。可能可以使用计时器进行轮询,但我想扩展以合并几个不同的外部源,并且我需要某种“服务器”进程来管理它——它不能真正被 GUI 主循环阻止。截至目前,我想合并一个 TCP 服务器,它接受不可预测的传入客户端连接,每个连接都提供新的数据来绘制。

是否可以设置第二个线程来处理所有套接字通信并使用它来调用.set_data() 来触发绘图重绘?或者这会干扰 GUI 主循环和/或导致 Traits/Chaco 中的竞争条件?

或者是否有另一种方式来思考这个问题,在 Traits 范式中更有意义?

【问题讨论】:

    标签: python sockets enthought chaco traitsui


    【解决方案1】:

    'set_data' 确实会触发重绘,因此不需要计时器。但请注意,重绘发生在主 gui 线程中。

    【讨论】:

    • 好的,所以可以有一个单独的线程等待来自 TCP 流的输入,在适当的时候调用“set_data”,导致主 gui 线程重绘绘图?这将是线程安全的吗? (即 Traits 是线程安全的吗?)。
    • 是的,但您仍然受制于 gil。
    • 这可能没问题,只要 Python 的套接字实现也是 GIL 感知的,并且在阻塞时不会保持它。
    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多