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.

Run Python Functionality Out-of-Process

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"

Out-of-Process Behavior and Limitations

When running Python out-of-process, keep these points in mind:

  • 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.

  • 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;
    

  • Using clear classes to free system memory will terminate the MATLABPyHost process and clear any Python objects. For alternatives to using clear classes, see the Tips section of the clear reference page.

See Also