Я участвую в исследовательском проекте на физическом факультете моего университета.Для эксперимента мы используем MokuLab (также известный как Moku или Pymoku) для сбора данных и потоковой передачи данных по мере их сбора.MokuLab может работать с использованием Python.Для анализа данных мы используем MATLAB для выполнения расчетов и отображения данных в интерфейсе.Для моего исследовательского проекта моя работа заключается в создании кода MATLAB и пользовательского интерфейса, который выполняет следующие действия:
- Инициирует MokuLab, чтобы начать сбор данных и их потоковую передачу, вызывая скрипт Python.
- Перемещает потоковый вызов в фоновый режим, чтобы избежать блокировки MATLAB и позволить пользователю выполнять любые другие функции, операции или действия в интерфейсе во время работы потока.
- Может остановить поток на полпути, если пользователь пожелает.
- Выполнить анализ данных и отобразить их во время работы потока.
В целом, у меня естьНет проблем с частью вызова MATLAB на скрипте Python.Моя текущая проблема заключается в том, что я не знаю, как переместить функцию, вызывающую поток, при выполнении анализа данных в фоновом режиме.Поэтому я хочу знать, знает ли кто-нибудь способ или показать мне пример того, как вызывать функцию в MATLAB, а затем запускать ее в фоновом режиме.Каким образом я могу это сделать?
Хотя я официально ничего не пробовал, я изучал варианты, которые могли бы помочь мне в этом.Один из рекомендованных мной инструктором параметров - использовать параллельную обработку.Тем не менее, кажется, что MATLAB требует много времени для инициализации parpool
, и я также не настолько опытен в этом стиле программирования;Я все еще учусь.Я также думал о вызове функции с функцией таймера, но я не думаю, что это даст мне большой контроль над потоком.
Для наглядного представления о том, что я хочу, скажем, у меня есть функция MATLABкоторый инициирует поток и выполняет анализ данных, находясь у него:
function initiateMokuStream(obj)
py.SomeModule.InititateStream();
print('Stream is running');
while (StreamRuns == True)
obj.file1 = open('ch1.txt');
obj.file2 = open('ch2.txt');
SecondDemodAnalysis(obj.file1,obj.file2,other args);
end
print('Stream is over, there is no more data to collect');
end
Ожидаемый результат: после вызова функции выводится 'Stream is running'
.После этого пользователь все еще может делать что-либо еще, не дожидаясь окончания потока и печатая 'Stream is over, there is no more data to collect'
.