Я пытаюсь работать с matlab через python, чтобы прототип системы, которую я разработал. Является ли mlabwrap способным обрабатывать многопроцессорность? Это может встретить как очень глупо, но я думал, что я мог бы сделать следующее:Mlabwrap multiprocessing
from multiprocessing import Process,Lock
from mlabwrap import mlab
from mlabwrap import mlab as mlab1
def some_Function(mlab,Astring)
#do some stuff....
p1=Process(target=some_Function,args=(mlab,"Example string 1"))
p2=Process(target=some_Function,args=(mlab1,"Example string 2"))
p1.start()
p2.start()
, но я получаю эту ошибку:
Traceback (most recent call last):
File "/usr/lib64/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/usr/lib64/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "test.py", line 15, in process_Camera
res=mlab.RetrieveAndProcess(cameraDirectory)
File "/home/mar608/data/cameraSystem/mlabwrap-1.1/build/lib.linux-x86_64-2.6/mlabwrap.py", line 607, in mlab_command
return self._do(name, *args, **update({'nout':nout}, kwargs))
File "/home/mar608/data/cameraSystem/mlabwrap-1.1/build/lib.linux-x86_64-2.6/mlabwrap.py", line 515, in _do
mlabraw.eval(self._session, "cd('%s');" % os.getcwd().replace("'", "''"))
error: Unable to evaluate string in MATLAB(TM) workspace
Примечание, я не получаю эту ошибку, когда я бегу просто функция регулярно, даже если я запускаю функцию один раз с mlab и снова с mlab1. Это происходит только тогда, когда я запускаю его как процесс, и это происходит независимо от того, запускаю ли я другой процесс с ним.
Любые советы были бы очень признательны!
Обратите внимание, что это происходит для всех функций matlab. Например, вызов mlab.sum ([2,3]) также дает ту же ошибку
ПРИМЕЧАНИЕ: Я знаю, что я не должен делать такого рода вещи для конечного продукта моего кода. Я не буду делать это в финальной версии, я просто хочу получить демо-версию.
Я пробовал это, возможно, так оно и есть, но мне все равно понадобится основная ошибка mlabwrap, которая не сможет работать в процессе (здесь возникает ошибка выше, и я получаю ее независимо от того, не я вызываю другой процесс. Пока я использую mlabwrap в процессе один раз, я получаю эту ошибку, и никакие вычисления не выполняются) – Mark
Возможно, вам удастся обойти это, создав объект 'mlabwrap' внутри рабочего процесса, а не создавая его в основном (вызывающем) процессе и передавая его как объект. Таким образом, библиотека Matlab Engine будет загружена и инициализирована в том же процессе, что и последующие вызовы Matlab. Возможно, вы можете развернуть «многопроцессорный» рабочий, каждый из которых загружен в модуль Matlab, а затем отправить их Matlab Запросы. Попросите каждого запустить функцию, которая инициализирует mlabwrap, а затем читает очередь или что-то для функций, которые будут применяться к ней. –