从C运行并行python脚本

从C运行并行python脚本,python,c,mpi,Python,C,Mpi,我有一个python脚本,通常通过使用命令并行运行 mpirun -n x script.py 是否有可能将这种并行化的python代码嵌入到C程序中 例如,python.org描述了如何在C语言中嵌入python代码。例如 但这不会很快成为一种选择 谢谢, Thomas您的脚本是否使用MPI(例如mpi4py) 如前所述,您可以在C程序中运行Python,但如果程序进行MPI调用,则可执行文件必须链接到MPI库 一种可能是使用mpirun运行C程序。只需像以前一样编译和运行: mpirun

我有一个python脚本,通常通过使用命令并行运行

mpirun -n x script.py
是否有可能将这种并行化的python代码嵌入到C程序中

例如,python.org描述了如何在C语言中嵌入python代码。例如


但这不会很快成为一种选择

谢谢,
Thomas您的脚本是否使用MPI(例如mpi4py)

如前所述,您可以在C程序中运行Python,但如果程序进行MPI调用,则可执行文件必须链接到MPI库

一种可能是使用mpirun运行C程序。只需像以前一样编译和运行:

mpirun -n x cprog 
在C程序内部,您可以执行Python代码,该代码已经在并行上下文中(因为C程序现在是并行运行的)。如果您实际需要使用MPI库,这里可能会有额外的工作

如果确实需要MPI调用(例如MPI_Comm_rank等),可以在MPI库中链接到C程序,如上所述执行,在C级别调用所需的任何MPI命令,然后通过Python C API将数据传递给Python代码

如果您不需要MPI调用(因此您只是使用mpirun在集群上启动多个版本的Python脚本),那么只需
mpirun
ing您的C程序就可以了

您还可以并行启动C程序,并在Python脚本中使用MPI,但请记住,您应该
MPI_Init
MPI_Finalize
都在Python层中(而不是在Python和C中)


如果您必须以串行方式运行C程序,我认为您需要退出以启动并行作业。

“但这不会很快成为一个选项。”为什么不呢?感谢您的回复。感谢您的回复,我的脚本使用了为串行和并行编写的库中的函数。也就是说,我可以使用“python script.py”或“mpirun-n4 python script.py”来指定如何调用MPI对我来说是隐藏的,所有这些都在我导入的库(dolfin)中处理。函数“知道”我是否在使用mpirun。我的印象是,“mpirun-nxcprog”只会导致python代码在每个x处理器上以串行方式运行。我不知道它实际上会运行。
sprintf(command_string,"mpirun -n x python script.py");
system(command_string);
mpirun -n x cprog