我有一个python脚本,我通常使用命令
并行运行mpirun -n x script.py
是否可以将此并行化的python代码嵌入到C程序中?
即。 python.org描述了如何在C here中嵌入python代码。 E.g。
#include <Python.h>
int
main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]); /* optional but recommended */
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print 'Today is',ctime(time())\n");
Py_Finalize();
return 0;
}
是否有可能做类似的事情,而不是报告时间,代码是并行的python代码?我的权宜之计解决方案是
sprintf(command_string,"mpirun -n x python script.py");
system(command_string);
但这不会很快就会出现。
谢谢, 托马斯
答案 0 :(得分:0)
你的脚本是否完全使用MPI(例如mpi4py)?
如您所述,您可以在C程序中运行Python,在other ways中,但如果程序进行MPI调用,则必须将可执行文件链接到MPI库。
一种可能性是使用mpirun运行C程序。只需像以前一样编译并运行:
mpirun -n x cprog
在C程序中,您可以执行Python代码,该代码已经在并行上下文中(因为C程序现在并行运行)。如果您确实需要使用MPI库,则可能会有额外的工作。
如果你确实需要MPI调用(例如MPI_Comm_rank等),你可以将MPI库链接到你的C程序,如上所述执行它,在C级别调用你需要的任何MPI命令,然后将数据传递给您的Python代码通过Python C API。
如果你不需要MPI调用(所以你只是使用mpirun在你的集群上启动许多版本的Python脚本),那么只需mpirun
你的C程序就可以了。
您也可以并行启动C程序,并在Python脚本中使用MPI,但请记住,您应该在Python层中MPI_Init
和MPI_Finalize
所有(而不是Python和C)。
如果你必须连续运行C程序,我认为你需要shell来启动并行作业。