我想通過python使用matlab來創建我開發的系統的原型。 mlabwrap是否能夠處理多處理?這可能會遇到非常愚蠢的,但我想我可以做到以下幾點:Mlabwrap多處理
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 2013-04-22 18:46:36
你可以通過在工作進程中構建'mlabwrap'對象來取代在主(調用)過程中構造它並將其作爲對象傳遞。那樣的話,Matlab Engine庫就會被加載並初始化到後面的Matlab調用所發生的相同的過程中。也許你可以啓動一個worker的multiprocessing.Pool,每個都加載Matlab引擎,然後將它們發送給Matlab要求。讓每個人都運行一個函數來初始化一個mlabwrap,然後讀取一個隊列或其他函數來應用它。 – 2013-04-22 20:02:39