Python 功能的进程外执行
注意
在进程外调用 Python® 函数时存在相关联的开销。此行为影响性能。MathWorks 推荐在进程内调用 Python 函数,这是默认模式。
MATLAB® 可以在单独进程中运行 Python 脚本和函数。在单独进程中运行 Python 使您能够:
在 Python 代码中使用一些与 MATLAB 不兼容的第三方库。
将 MATLAB 进程与 Python 代码中的崩溃隔离。
在进程外运行 Python 功能
要在进程外运行,请调用 pyenv 函数并将 "ExecutionMode" 参量设置为 "OutOfProcess"。例如,假设您要在 Python 环境中创建此 list 变量。
['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 和 MATLAB 之间传递的变量的大小限制为 2 GB。此限制应用于进程间传递的数据和支持信息。
清除 Python 对象是异步操作,这意味着,在执行同步调用后,Python 对象可能仍存在于 Python 中。例如,在以下代码中,可能在销毁
myList之前创建myList2。myList=py.list; clear myList myList2 = py.list;使用
clear classes释放系统内存将终止MATLABPyHost进程并清除所有 Python 对象。有关使用clear classes的替代方法,请参阅clear参考页的提示部分。