【发布时间】:2014-07-31 20:09:24
【问题描述】:
我正在尝试创建一个非常基本的应用程序,它将从流数据源更新 matplotlib 中的图表。数据在单独的过程中接收。但即使是最基本的显示,我的 matplotlib 图形也一直在我身上死去。 matplotlib 窗口失去交互性并变成“图 1(无响应)”。我是否需要明确地给 matplotlib 一些 CPU 时间才能使其与 multiprocessing 很好地配合使用?
这是一个基本示例,它几乎适用于 Windows 7、64 位、Python 2.7.3 32 位的所有后端。我正在使用来自here 的 scipy-stack 的非官方二进制文件:
编辑:它似乎也无法在 Ubuntu(32 位)上运行。
import time
from multiprocessing import Process
import matplotlib.pyplot as plt
def p1_func():
while True:
time.sleep(1)
def p2_func():
plt.ion()
plt.plot([1.6, 2.7])
while True:
time.sleep(1)
if __name__ == '__main__':
p1_proc = Process(target=p1_func)
p2_proc = Process(target=p2_func)
p1_proc.start()
p2_proc.start()
p1_proc.join()
p2_proc.join()
我做错了什么?
您通常如何使 matplotlib 的实时数据交互式图形和线程(多处理或其他)共存?
【问题讨论】:
-
gui 事件循环和多进程无法相处。要么将所有绘图保留在主进程中,要么在您使用的任何工具包中使用线程(但同样,将所有绘图保留在主线程上,只需进行农场工作)。
-
有什么方法可以搅动 gui 事件循环?
-
你可以通过改变后端matplotlib.org/faq/usage_faq.html#what-is-a-backend来解决一些问题
标签: python matplotlib multiprocessing