在mayavi场景窗口关闭之前,Python脚本不会继续

时间:2015-05-28 10:06:43

标签: python matplotlib mayavi

以下代码(导入除外)在循环中执行,其中打开了4个数字并绘制了简单的图形。但是,当创建mayavi场景时,程序会停止并且只会继续,一次!全部!数字已经关闭! 它在之前/之后的打印命令之间停止:

from mayavi import mlab as mayavi_mlab


plot_extent = (-20, 20, 0, 30, 0, 1)
s= mayavi_mlab.surf(x, y, z, colormap='PuBu',extent=plot_extent, vmin=-0.5, vmax=0.5)

mayavi_mlab.axes(s, color=(.7, .7, .7), extent=plot_extent,ranges=(-120, 120, 0, 10J,0,1), xlabel='site i', ylabel='energy E',x_axis_visibility=True, y_axis_visibility=True, z_axis_visibility=False)
mayavi_mlab.view(azimuth=-90, elevation=35, distance=70, focalpoint=None)

print('before')        
mayavi_mlab.show()
print('after')

我做错了什么? 平台:os x 10.9.5

Python 2.7.9 | Anaconda 2.1.0(x86_64)| (默认,2014年12月15日,10:37:34) [dclwin上的[GCC 4.2.1(Apple Inc. build 5577)]

1 个答案:

答案 0 :(得分:0)

docs for mayavi.mlab.show州:

  

默认情况下,此函数只需创建一个GUI并在需要时启动其事件循环。

因此mayavi_mlab.show()将启动主事件循环,直到此循环结束才返回。但就是这样,当所有数据都已关闭且没有任何用户界面显示时。

如果您不希望阻止此部分代码,则应使用threadingmultiprocessing或任何其他并发库或方法。如果您想快速实现这一目标,os.fork()可能就足够了:

print('before')
if os.fork() == 0:
    try:
        mayavi_mlab.show()
    finally:
        os._exit(os.EX_OK)
print('after')

但请记住,这将为您留下Zombie processes