在并行化期间正确调用和加载外部变量

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)

当然,您应该添加自己的错误检查。