python matplotlib: построение графиков в другом процессе
РЕДАКТИРОВАТЬ: Конечное требование для такой программы на Python: получение данных из UART от внешней схемы (которая, вероятно, оснащена некоторыми датчиками), программа обработает эти данные и нарисует динамически обновляемую кривую на экране компьютера.
Итак, я хочу построить динамически, следующий тестовый скрипт запускает подпроцесс, и в этом процессе он принимает данные из родительского процесса через очередь и соответственно строит данные.
Но когда скрипт запускается, отображается только пустая фигура, я вижу, как консоль выводит сообщения «put:» и «got:», что означает, что родитель и подпроцесс работают и обмениваются данными, но в окне рисунка GUI ничего не происходит.
Кроме того, окно графического интерфейса не реагирует, и если я нажму на окно, оно будет зависать.
Система Windows 10, 64 бит. Версия Python 2.7 (32 бита)
В чем здесь проблема? благодарю вас!
import matplotlib.pyplot as plt
import multiprocessing as mp
import random
import numpy
import time
def worker(q):
plt.ion()
ln, = plt.plot([], [])
plt.show()
while True:
obj = q.get()
n = obj + 0
print "sub : got:", n
ln.set_xdata(numpy.append(ln.get_xdata(), n))
ln.set_ydata(numpy.append(ln.get_ydata(), n))
plt.draw()
if __name__ == '__main__':
queue = mp.Queue()
p = mp.Process(target=worker, args=(queue,))
p.start()
while True:
n = random.random() * 5
print "main: put:", n
queue.put(n)
time.sleep(1.0)