为什么向量化的 numpy 方法在 python ssh 子进程中只使用一个核心

Why are vectorized numpy methods using only a single core in a python ssh subprocess

我需要一种算法来同时在不同的计算机上(使用不同的参数)执行文件 'test.py',并且在每台计算机上,矢量化方法,例如来自 numpy 包,应该能够使用多个内核。

一个最小的(不起作用)示例,由以下两个文件组成。

文件A:test.py

import numpy
import os     #to verify whether process is allowed to use all cores
os.system("taskset -p 0xff %d" % os.getpid())   
a = numpy.random.random((10000,10000))   #some random matrix
b = numpy.dot(a,a)                       #some parallelized calculation

和文件 B:control.py

import subprocess
import os
callstring = "python " + str(os.getcwd()) + "/test.py" # console command to start test.py
sshProcess = subprocess.Popen(str("ssh <pc-name>"),
                              stdin=subprocess.PIPE,
                              shell=True)
sshProcess.stdin.write(str(callstring))    # start file.py
sshProcess.stdin.close()

现在,当我 运行 control.py 时,正在执行文件 test.py,但是,只有一个内核。

如果我直接从控制台 运行 test.py python test.py(我不想要),则使用多核。

不幸的是,我是子流程扩展的新手,而且我也不是 Linux 系统方面的专家。但是,到目前为止,我能够获得以下知识:

所以看来是Popen结合ssh的问题!?

您有什么想法或建议吗?感谢您的帮助!

编辑/附录: 我发现包“multiprocessing”的并行化方法 运行 没有多核。所以这似乎又是一个麻木的问题。很抱歉之前没有测试过!

我正在使用 Python 2.7.12 和 Numpy 1.11.1

我可以解决我的问题:

出于某种原因,我仍然不明白 - 正如我所说,我的 Linux 知识是一场灾难 - 在上面调用了 不同的 python Popen 环境。

在控制台中,which python 给出“../anaconda2/bin/python”,但 ssh <the very same computer> which python 给出“/usr/bin/python”。

Anaconda 似乎使用 MKL 库进行并行计算,这对于 /usr/bin 中的 python 是未知的。

所以问题的根源是在不知道它做什么的情况下使用了 ssh。同样的问题已经出现: Why does an SSH remote command get fewer environment variables then when run manually?

再次感谢您的关注。