在并行化期间正确调用和加载外部变量
Correctly calling and loading external variables during parallelisation
我将使用 C 在 python 中并行处理一个巨大的任务。 python 脚本可用 here。附加脚本是单密度 (dens
) 列的工作原型。下一步是通过调用 1000 个新的 dens
列(顺序)将其变成 Monte Carlo 模拟,这些列已经在名为 0001.txt - 1000.txt
的文件中创建(每个列都有一个 dens
值对应 nodes
)。
显然第一步是从下面的行中删除 dens
…
x1, x2, y1, y2, z1, z2, dens = np.loadtxt('nodes.txt', delimiter=' ', usecols=(0, 1, 2, 3, 4, 5, 6), unpack=True)
…这很简单。创建以下几行是为了解决脚本本身的初始问题,这让我了解了我正在尝试做的事情......
x1, x2, y1, y2, z1, z2 = np.loadtxt('nodes.txt', delimiter=' ', usecols=(0, 1, 2, 3, 4, 5), unpack=True)
for i in range (1,1001):
dens, = np.loadtxt('{:0>4}.txt'.format(i), delimiter=' ', usecols=(0), unpack=True
…但我被告知这将不允许在我们的集群上进行并行化,我需要在命令行中使用一些东西,比如…
python myscript.py 000.txt
我的问题是如何将 dens
编码到脚本中,以便上面的命令提示符起作用?
我找到了 this 页面,其中显示了诸如...
之类的选项
from subprocess import call
call([])
和
os.system
…但我不完全确定如何调整它以便将正确的变量调用到正确的位置。如果这是一个简单的解决方案,我深表歉意,但我已经被 python 抛入了深渊,我仍在努力站稳脚跟。
This answer 向您展示如何从 python:
获取命令行输入
import sys
print sys.argv
所以你可以使用
filename = sys.argv[1]
dens, = np.loadtxt(filename, delimiter=' ', usecols=(0), unpack=True)
当然,您应该添加自己的错误检查。
我将使用 C 在 python 中并行处理一个巨大的任务。 python 脚本可用 here。附加脚本是单密度 (dens
) 列的工作原型。下一步是通过调用 1000 个新的 dens
列(顺序)将其变成 Monte Carlo 模拟,这些列已经在名为 0001.txt - 1000.txt
的文件中创建(每个列都有一个 dens
值对应 nodes
)。
显然第一步是从下面的行中删除 dens
…
x1, x2, y1, y2, z1, z2, dens = np.loadtxt('nodes.txt', delimiter=' ', usecols=(0, 1, 2, 3, 4, 5, 6), unpack=True)
…这很简单。创建以下几行是为了解决脚本本身的初始问题,这让我了解了我正在尝试做的事情......
x1, x2, y1, y2, z1, z2 = np.loadtxt('nodes.txt', delimiter=' ', usecols=(0, 1, 2, 3, 4, 5), unpack=True)
for i in range (1,1001):
dens, = np.loadtxt('{:0>4}.txt'.format(i), delimiter=' ', usecols=(0), unpack=True
…但我被告知这将不允许在我们的集群上进行并行化,我需要在命令行中使用一些东西,比如…
python myscript.py 000.txt
我的问题是如何将 dens
编码到脚本中,以便上面的命令提示符起作用?
我找到了 this 页面,其中显示了诸如...
之类的选项from subprocess import call
call([])
和
os.system
…但我不完全确定如何调整它以便将正确的变量调用到正确的位置。如果这是一个简单的解决方案,我深表歉意,但我已经被 python 抛入了深渊,我仍在努力站稳脚跟。
This answer 向您展示如何从 python:
获取命令行输入import sys
print sys.argv
所以你可以使用
filename = sys.argv[1]
dens, = np.loadtxt(filename, delimiter=' ', usecols=(0), unpack=True)
当然,您应该添加自己的错误检查。