Используйте matplotlib
вызовы, которые не заблокируются:
Используя draw()
:
from matplotlib.pyplot import plot, draw, show
plot([1,2,3])
draw()
print 'continue computation'
# at the end call show to ensure window won't close.
show()
Используя интерактивный режим:
from matplotlib.pyplot import plot, ion, show
ion() # enables interactive mode
plot([1,2,3]) # result shows immediatelly (implicit draw())
print 'continue computation'
# at the end call show to ensure window won't close.
show()
В моем случае я хотел иметь несколько всплывающих окон окон, поскольку они вычисляются. Для ссылки это - путь:
from matplotlib.pyplot import draw, figure, show
f1, f2 = figure(), figure()
af1 = f1.add_subplot(111)
af2 = f2.add_subplot(111)
af1.plot([1,2,3])
af2.plot([6,5,4])
draw()
print 'continuing computation'
show()
пз. Довольно полезное руководство по интерфейсу OO matplotlib .
Можно хотеть прочитать этот документ в matplotlib
документация, названная:
Лучше всегда согласовать с библиотекой, которой Вы пользуетесь, если это поддерживает использование в неблокирование путь.
, Но если Вы хотите более универсальное решение, или если нет никакого другого пути, можно выполнить что-либо, что блоки в разделенном процессе при помощи multprocessing
модуль включал в Python. Вычисление продолжится:
from multiprocessing import Process
from matplotlib.pyplot import plot, show
def plot_graph(*args):
for data in args:
plot(data)
show()
p = Process(target=plot_graph, args=([1, 2, 3],))
p.start()
print 'yay'
print 'computation continues...'
print 'that rocks.'
print 'Now lets wait for the graph be closed to continue...:'
p.join()
, Который имеет издержки запуска нового процесса и иногда более тверд отладить на сложных сценариях, таким образом, я предпочел бы другое решение (использующий matplotlib
неблокирующиеся вызовы API )