Main Content

Out-of-Process Execution of Python Functionality

Note

There is overhead associated with calling Python® functions out-of-process. This behavior affects performance. MathWorks recommends calling Python functions in-process, which is the default mode.

MATLAB® can run Python scripts and functions in a separate process. Running Python in a separate process enables you to:

  • Use some third-party libraries in the Python code that are not compatible with MATLAB.

  • Isolate the MATLAB process from crashes in the Python code.

To run out-of-process, call the pyenv function with the "ExecutionMode" argument set to "OutOfProcess". For example, suppose that you want to create this list variable in the Python environment.

['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

To create this list out-of-process, set the MATLAB execution mode to "OutOfProcess". MATLAB displays information about your current Python environment.

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

Create the variable.

py.list({'Monday','Tuesday','Wednesday','Thursday','Friday'})
ans = 

  Python list with no properties.

    ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

MATLAB creates a process named 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"

Note

Clearing a Python object is asynchronous,​ which means that the Python object might remain in Python after the invocation of a synchronous call. For example, in the following code it is possible that myList2 is created before myList is destroyed.

myList=py.list;
clear myList
myList2 = py.list;

Limitations

The size of variables passed between Python and MATLAB is limited to 2 GB when you call a Python function out-of-process. This limit applies to the data plus supporting information passed between the processes.

See Also