Python 機能のアウトプロセスでの実行
R2026bメモ
アウトプロセスでの Python® 関数の呼び出しには、関連するオーバーヘッドがあります。この動作はパフォーマンスに影響します。Python 関数はインプロセスで呼び出してください (これは既定のモードです)。
MATLAB® は Python のスクリプトと関数を個別のプロセスで実行できます。Python を個別のプロセスで実行すると、以下が可能になります。
Python コードで MATLAB と互換性のないサードパーティ ライブラリを使用する。
Python コードでのクラッシュから MATLAB プロセスを分離する。
長時間実行中または応答しない Python コードに割り込むには、Ctrl+C を押します。 (R2026b 以降)
アウトプロセスでの 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リファレンス ページのヒントのセクションを参照してください。アウトプロセスで実行中の長時間実行または応答しない Python プログラムに割り込むには、Ctrl+C を押します。これにより、
MATLABPyHostプロセスが終了します。Python を再度実行する前に、まずterminate(pyenv)を呼び出して Python 環境を正しくシャットダウンする必要があります。 (R2026b 以降)