我試圖將一個 Python 物件作為引數傳遞給我在后臺使用 parfeval 評估的函式。Python 物件是 Python 類的一個實體,我在下面詳細介紹。但是,為了重現錯誤,我將用 Python 字典來舉例說明……但是,僅僅使用 struct(pydict) 是行不通的,因為我會丟失 Python 類中的所有屬性和方法。
假設 Python 字典是
o = py.dict(pyargs('soup',3.57,'bread',2.29,'bacon',3.91,'salad',5.00));
功能是
function t = testFunc(x)
t = x{'soup'};
end
如果我評估函式,我會得到正確的答案:
>> testFunc(o)
ans =
3.5700
但是,如果我使用 ,則會parfeval出現以下錯誤:
>> f = parfeval(@testFunc,1,o);
>> fetchOutputs(f)
Error using parallel.Future/fetchOutputs
One or more futures resulted in an error.
Caused by:
Error using testFunc (line 2)
Invalid or deleted object.
是否有解決此錯誤的方法,這并不意味著我必須重新編碼整個 Python 類?這是我想作為函式傳遞給的物件的預覽parfeval:
clt =
Python Client with properties:
enforce_enums: 1
api_key: [1×45 py.str]
request_number: [1×1 py.int]
logger: [1×1 py.logging.Logger]
session: [1×1 py.authlib.integrations.httpx_client.oauth2_client.OAuth2Client]
token_metadata: [1×1 py.tda.auth.TokenMetadata]
<tda.client.synchronous.Client object at 0x000001ECA08EAE50>
我在檔案中沒有發現任何限制說明parfeval函式輸入不能是任何東西......
https://www.mathworks.com/help/matlab/ref/parfeval.html
"X1,...,Xm — 輸入引數逗號分隔的變數或運算式串列...輸入引數,指定為逗號分隔的變數或運算式串列"
uj5u.com熱心網友回復:
MATLAB->Python 支持的限制之一是 Python 物件無法序列化。parfeval(和其他并行構造)需要序列化才能將資料從一個 MATLAB 行程傳輸到另一個行程。
您可以通過讓每個作業人員直接構建資料結構并通過 存盤/訪問它來解決parallel.pool.Constant此問題,如下所示:
oC = parallel.pool.Constant(@() py.dict(pyargs('soup',3.57,'bread',2.29,'bacon',3.91,'salad',5.00)));
fetchOutputs(parfeval(@(c) c.Value{'salad'}, 1, oC))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/367519.html
