Bug#946986: python3-h5py: h5py does not play nicely with subprocess and mpirun
Rafael Laboissière
rafael at laboissiere.net
Fri Jan 24 12:17:22 GMT 2020
* Drew Parsons <dparsons at debian.org> [2020-01-23 19:02]:
> On 2020-01-23 18:15, Thibaut Paumard wrote:
>> Hi,
>>
>> Le 22/01/2020 à 16:49, Drew Parsons a écrit :
>>> Might be worth bringing to the attention of the subprocess
>>> developers. I
>>> figure they'll either be interested to know about the problem or will
>>> have a simple explanation.
>>
>> I'm not sure subprocess is involved at all, it may be that MPI_Init()
>> simply dies because h5py has already called it earlier.
>>
>> Hi have no time for testing right now, but a simple printf() before
>> calling MPI_Init() should tell.
>
> That sounds plausible.
I am not sure this would be an explanation for the problem.
At any rate, I found a minimal example that exposes the bug. Consider
these two scripts:
#############################################################
### File name: bugtest-without-h5py.py
import subprocess
simulationProc = subprocess.Popen("mpirun",
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
(stdout, stderr) = simulationProc.communicate()
returnCode = simulationProc.wait()
print("stdout = ", stdout)
print("stderr = ", stderr)
print("return code = ", returnCode)
#############################################################
#############################################################
### File name: bugtest-with-h5py.py
import subprocess
import h5py
simulationProc = subprocess.Popen("mpirun",
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
(stdout, stderr) = simulationProc.communicate()
returnCode = simulationProc.wait()
print("stdout = ", stdout)
print("stderr = ", stderr)
print("return code = ", returnCode)
#############################################################
The only difference between them is the line containing "import h5py" in
the second.
Here is the result for the first script:
$ python3 bugtest-without-h5py.py
stdout = b''
stderr = b'--------------------------------------------------------------------------\nmpirun could not find anything to do.\n\nIt is possible that you forgot to specify how many processes to run\nvia the "-np" argument.\n--------------------------------------------------------------------------\n'
return code = 1
and here is the result for the second script:
$ python3 bugtest-with-h5py.py
stdout = b''
stderr = b''
return code = 1
It seems that, when h5py is imported, the mpirun command is not even
launched by subprocess.Popen. Notice that there is not even a program
that is launched by mpirun that would call MPI_Init.
This is quite weird.
Best,
Rafael
More information about the debian-science-maintainers
mailing list