LINUX.ORG.RU

matplotlib в отдельном потоке/процессе?

 ,


1

3

Есть некоторый код, который в цикле посылает команды устройству, а по исполнении команды и фиксированному таймауту получает данные с сенсора. Данные динамически отображаются через matplotlib. Что то вроде:

fig = plt.figure()
ax1 = fig.add_subplot(111)
...
while 1:
	send_command(...)
	#timeout
	...
	data = get_data(...)
	ax1.plot(data)
	plt.draw()
Естественно, во время выполнения команд и таймаута окно с графиком фризится. Можно ли как ни будь запустить его в отдельном потоке/процессе, так что бы окно графопостроителя оставалось интерактивным?

★★★★★

Хмм, а почему бы не сделать наоборот? В отдельном потоке общаться с устройством и писать данны в разделяемую переменную, а в основном читать ее и рисовать плот?
Именно по твоему решению. Я не уверен, но, возможно, достаточно вызвать в другом потоке .draw()

Aswed ★★★★★ ()

Пилишь инициализацию матплотлиба и обновление графика в отдельную функцию, при этом данные получаешь через multiprocessing.Pipe. Потом скармливаешь ее multiprocess.Process вместе с пайпом, по которому будешь пихать данные. Оно должно достаточно быстро работать на объемах, на которых матплотлиб не фризится. Только не забудь просигналить процессу, что пора закругляться, и обработать внутри него.

lu4nik ★★★ ()