Python 機能のアウトプロセスでの実行
メモ
アウトプロセスでの Python® 関数の呼び出しには、関連するオーバーヘッドがあります。この動作はパフォーマンスに影響します。MathWorks では Python 関数をインプロセスで呼び出すことを推奨しており、これは既定のモードです。
MATLAB® は Python のスクリプトと関数を個別のプロセスで実行できます。Python を個別のプロセスで実行すると、以下が可能になります。
Python コードで MATLAB と互換性のないサードパーティ ライブラリを使用する。
Python コードでのクラッシュから MATLAB プロセスを分離する。
アウトプロセスでの Python 機能の実行
アウトプロセスで実行するには、"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 と MATLAB 間で受け渡しされる変数のサイズは、Python 関数をアウトプロセスで呼び出す場合、2 GB に制限されます。この制限は、プロセス間で渡されるデータとサポート情報に適用されます。
Python オブジェクトのクリアは非同期です。これは、同期呼び出しの実行後に Python オブジェクトが Python 内に残る可能性のあることを意味します。たとえば、次のコード内で、
myListが破棄される前にmyList2が作成される可能性があります。myList=py.list; clear myList myList2 = py.list;clear classesを使用してシステム メモリを解放すると、MATLABPyHostプロセスが終了し、Python オブジェクトがすべてクリアされます。clear classesの使用に代わる手段については、clearリファレンス ページのヒントのセクションを参照してください。