Python 脚本不会继续,直到 mayavi 场景 window 关闭
Python script doesn't continue until mayavi scene window closed
以下代码(导入除外)在循环中执行,其中打开了 4 个图形并绘制了简单图形。但是,当创建 mayavi 场景时,程序停止并仅继续一次!全部!数字已关闭!
它在打印命令 before/after:
之间停止
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')
我做错了什么?
platform:os x 10.9.5
Python 2.7.9 |蟒蛇 2.1.0 (x86_64)| (默认,2014 年 12 月 15 日,10:37:34)
[GCC 4.2.1 (Apple Inc. build 5577)] 在达尔文
By default, this function simply creates a GUI and starts its event loop if needed.
因此 mayavi_mlab.show()
将启动主事件循环而不是 return 直到此循环完成。但事实就是如此,当 所有 个数字都已关闭并且没有 UI 被显示时。
如果你不希望这部分代码被阻塞,你应该使用 threading, multiprocessing or any other concurrent library or method. If you want to achieve this fastly, os.fork()
可能就足够了:
print('before')
if os.fork() == 0:
try:
mayavi_mlab.show()
finally:
os._exit(os.EX_OK)
print('after')
但请记住,这会给您留下 Zombie processes。
以下代码(导入除外)在循环中执行,其中打开了 4 个图形并绘制了简单图形。但是,当创建 mayavi 场景时,程序停止并仅继续一次!全部!数字已关闭! 它在打印命令 before/after:
之间停止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')
我做错了什么? platform:os x 10.9.5
Python 2.7.9 |蟒蛇 2.1.0 (x86_64)| (默认,2014 年 12 月 15 日,10:37:34) [GCC 4.2.1 (Apple Inc. build 5577)] 在达尔文
By default, this function simply creates a GUI and starts its event loop if needed.
因此 mayavi_mlab.show()
将启动主事件循环而不是 return 直到此循环完成。但事实就是如此,当 所有 个数字都已关闭并且没有 UI 被显示时。
如果你不希望这部分代码被阻塞,你应该使用 threading, multiprocessing or any other concurrent library or method. If you want to achieve this fastly, os.fork()
可能就足够了:
print('before')
if os.fork() == 0:
try:
mayavi_mlab.show()
finally:
os._exit(os.EX_OK)
print('after')
但请记住,这会给您留下 Zombie processes。