从 pascal 调用 python 模块函数
两种方式:
- 使用 PythonEngine.FindFunction
pyfunc := PythonEngine1.FindFunction('__main__', 'fun2');
if Assigned(pyfunc) then
begin
try
// 执行需要参数的函数
PythonEngine1.EvalFunction(pyfunc, ['arg1__123', 'arg2']);
finally
PythonEngine1.Py_DecRef(pyfunc);
end;
end;
- 通过引用 VarPyth 单元来直接调用
MainModule.fun2('arg1__123', 'arg2');
从 pascal 开启 python 多线程
官方示例 Demo33 https://github.com/pyscripter/python4delphi/blob/master/Demos/Demo33/ThSort.pas
可在单个解释器启用多线程,也可开启多个解释器线程
python 全局锁不利于多核编程,python 本身的解决方案就是多进程。所以 python4delphi 开了多个解释器来实现多线程。
https://en.delphipraxis.net/topic/4672-xdata-rest-server-request-python4delphi/
https://blogs.embarcadero.com/wp-content/uploads/2020/09/Python4DelphiPart-2-7796888.pdf
经测试 aynscio 代码无法在 python4delphi 的多解释器线程运行。
python 利用 Delphi/pascal 的多核编程
在 pascal 中使用 TParallel 来并行计算,然后导出模块给 python 用。