Main Content

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

参考