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 に制限されます。この制限は、プロセス間で渡されるデータとサポート情報に適用されます。