我需要一个执行文件的算法' 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正在执行,但是只有一个核心。
如果我直接从控制台python test.py
(我不想要)运行test.py,则会使用多个核心。
不幸的是,我是子进程扩展的新手,而且我也不是Linux系统的专家。但是,到目前为止,我能够获得以下知识:
subprocess.call("python test.py", shell=True)
会起作用,即使用多个核心。但是,我需要ssh来解决其他计算机问题。python test.py
也会产生所需的结果:使用多个核心。但是,我需要自动完成这一步骤,因此,我想创建多个这样的ssh-consoles&#39;用python代码。os.system("taskset -p 0xff %d" % os.getpid())
产生输出&#39;当前亲和力ff,新亲和力ff&#39; = 8个可能的核心因此,似乎是Popen与ssh结合的问题!?
您有任何想法或建议吗?谢谢你的帮助!
EDIT / ADDENDUM:我发现包“多处理”的并行化方法可以运行多个核心。所以它似乎再次成为一个尴尬的问题。我为之前没有测试过而道歉!
我正在使用Python 2.7.12和Numpy 1.11.1
答案 0 :(得分:1)
我可以解决我的问题:
由于某种原因,我仍然没有理解 - 正如我所说,我的Linux知识是一种灾难 - 在上述Popen环境中调用不同的python 。
在控制台中,var username = User.Identity.Name;
给出'../anaconda2/bin/python',但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?
再次感谢您的关注。