以下代码(导入代码除外)在循环中执行,其中打开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)|(默认,Dec 15 2014, 10:37:34)[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
mayavi.mlab.show
状态文档:
默认情况下,该函数只是创建一个GUI,并在需要时启动其事件循环。
因此,mayavi_mlab.show()
将启动主事件循环,直到该循环完成才返回。但是,当所有图形都关闭并且没有UI要显示时,情况就是这样。
如果你不希望这部分代码阻塞,你应该使用线程、多处理或任何其他并发库或方法。如果您想快速实现这一点,os.fork()
可能就足够了:
print('before')
if os.fork() == 0:
try:
mayavi_mlab.show()
finally:
os._exit(os.EX_OK)
print('after')
但是请记住,这将给您留下一个僵尸进程。