从C运行并行的Python脚本

0 投票
1 回答
512 浏览
提问于 2025-04-20 23:38

我有一个Python脚本,通常我会通过以下命令来并行运行它。

mpirun -n x script.py

我想知道是否可以把这个并行的Python代码嵌入到一个C程序里?

也就是说,python.org上有介绍如何在C语言中嵌入Python代码,具体可以查看这里。比如:

#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

你的脚本有没有用到MPI(比如说mpi4py)呢?

你可以在C程序里运行Python代码,就像你描述的那样,还有其他一些方法,但如果程序里有MPI的调用,那么这个可执行文件就必须链接到MPI库。

一种方法是用mpirun来运行C程序。你只需要像之前那样编译和运行:

mpirun -n x cprog 

在你的C程序里,你可以执行Python代码,这样它就会在一个并行的环境中运行(因为C程序现在是并行运行的)。如果你真的需要使用MPI库,这里可能会有额外的工作。

如果你需要MPI的调用(比如MPI_Comm_rank等),你可以把MPI库链接到你的C程序里,像上面那样执行,调用你需要的MPI命令,然后通过Python的C API把数据传给Python代码。

如果你不需要MPI的调用(也就是说你只是用mpirun在你的集群上启动多个Python脚本),那么直接用mpirun运行你的C程序就可以了。

你也可以并行启动C程序,并在Python脚本中使用MPI,但要记住,你应该在Python层面上完成MPI_InitMPI_Finalize,而不是在Python和C中都做。

如果你必须串行运行C程序,我想你需要通过命令行来启动并行任务。

撰写回答