Скрипт Python не продолжается, пока окно сцены Mayavi не закроется

Следующий код (кроме импорта) выполняется в цикле, где открываются 4 фигуры и строятся простые графики. Однако, когда создается сцена mayavi, программа останавливается и продолжается только после того, как !all! цифры закрыты! Он останавливается между командами печати до/после:

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')

Что я делаю не так? платформа:ОС х 10.9.5

Python 2.7.9 | Анаконда 2.1.0 (x86_64) | (по умолчанию, 15 декабря 2014 г., 10:37:34) [GCC 4.2.1 (Apple Inc., сборка 5577)] на Darwin


person mic    schedule 28.05.2015    source источник


Ответы (1)


В документах для mayavi.mlab.show указано:

По умолчанию эта функция просто создает графический интерфейс и при необходимости запускает цикл обработки событий.

Поэтому mayavi_mlab.show() запустит основной цикл событий и не вернется, пока этот цикл не завершится. Но это только в том случае, когда все фигуры закрыты и не осталось UI для показа.

Если вы не хотите, чтобы эта часть кода блокировала работу, вам следует использовать потоки, многопроцессорность или любую другую параллельную библиотеку или метод. Если вы хотите добиться этого быстро, os.fork() может быть достаточно:

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

Но имейте в виду, что это оставит вас с процессами-зомби.

person tynn    schedule 28.05.2015
comment
Поэтому threading стоит первым в списке. Но можно было бы использовать и os.fork. В зависимости от того, что необходимо, он может даже иметь некоторые преимущества перед использованием потоков. - person tynn; 30.05.2015