从C运行并行python脚本

时间:2014-09-10 21:46:58

标签: python c mpi

我有一个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);

但这不会很快就会出现。

谢谢, 托马斯

1 个答案:

答案 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_InitMPI_Finalize所有(而不是Python和C)。

如果你必须连续运行C程序,我认为你需要shell来启动并行作业。