Python 機能のアウトプロセスでの実行
メモ
アウトプロセスでの Python® 関数の呼び出しには、関連するオーバーヘッドがあります。この動作はパフォーマンスに影響します。MathWorks では Python 関数をインプロセスで呼び出すことを推奨しており、これは既定のモードです。
MATLAB® は Python のスクリプトと関数を個別のプロセスで実行できます。Python を個別のプロセスで実行すると、以下が可能になります。
Python コードで MATLAB と互換性のないサードパーティ ライブラリを使用する。
Python コードでのクラッシュから MATLAB プロセスを分離する。
アウトプロセスで実行するには、"ExecutionMode" 引数を "OutOfProcess" に設定して関数 pyenv を呼び出します。たとえば、次の変数 list を Python 環境で作成するとします。
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
この list をアウトプロセスで作成するには、MATLAB 実行モードを "OutOfProcess" に設定します。MATLAB は、現在の Python 環境に関する情報を表示します。
pyenv(ExecutionMode="OutOfProcess")ans =
PythonEnvironment with properties:
Version: "3.11"
Executable: "C:\Python311\pythonw.exe"
Library: "C:\windows\system32\python311.dll"
Home: "C:\Python311"
Status: NotLoaded
ExecutionMode: OutOfProcess
変数を作成します。
py.list({'Monday','Tuesday','Wednesday','Thursday','Friday'})ans =
Python list with no properties.
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']MATLAB は MATLABPyHost という名前のプロセスを作成します。
pyenv
ans =
PythonEnvironment with properties:
Version: "3.11"
Executable: "C:\Python311\pythonw.exe"
Library: "C:\windows\system32\python311.dll"
Home: "C:\Python311"
Status: Loaded
ExecutionMode: OutOfProcess
ProcessID: "8196"
ProcessName: "MATLABPyHost"
メモ
Python オブジェクトのクリアは非同期です。これは、同期呼び出しの実行後に Python オブジェクトが Python 内に残る可能性のあることを意味します。たとえば、次のコード内で、myList が破棄される前に myList2 が作成される可能性があります。
myList=py.list;
clear myList
myList2 = py.list;
制限
Python と MATLAB 間で受け渡しされる変数のサイズは、Python 関数をアウトプロセスで呼び出す場合、2 GB に制限されます。この制限は、プロセス間で渡されるデータとサポート情報に適用されます。