Python 进程不能同时执行3个以上的函数

Python 进程不能同时执行3个以上的函数,python,Python,我有script.py,它的目标是处理多达3个轨迹文件(.gro),用户可以选择在一次脚本执行中分析多少个轨迹文件。我还有多达5个功能(分析类型),用户可以选择在终端上输入多少: python script.py-f traj1.gro、traj2.gro、traj3.gro-a analysis1、analysis2、analysis3-o结果 每个分析类型都有自己的功能,用户输入的所有traj文件都存储在一个列表中:analysistypes。一个接一个地处理每个traj文件,但所有分析类型

我有script.py,它的目标是处理多达3个轨迹文件(.gro),用户可以选择在一次脚本执行中分析多少个轨迹文件。我还有多达5个功能(分析类型),用户可以选择在终端上输入多少:

python script.py-f traj1.gro、traj2.gro、traj3.gro-a analysis1、analysis2、analysis3-o结果

每个分析类型都有自己的功能,用户输入的所有traj文件都存储在一个列表中:
analysistypes
。一个接一个地处理每个traj文件,但所有分析类型都需要同时进行,所以我在代码中的某个地方使用了Process

files = [] #['traj1.gro','traj2.gro','traj3.gro']
analysistypes = [] #['analysis1','analysis2','analysis3']
results = '' (everything from the terminal stored using sys.argv)

def analysis1(ffile):
    outfile1 = '%s_outfile1_%s.xvg'%(results, ffile[:-4])
    with open('%s'%outfile1, 'w') as out:
            out.write('@    TITLE "analysis1"')
            out.write('\n')
    with open(ffile, 'rb') as fi:
        ...do something
        with open('%s'%outfile1, 'a') as out: #outfile1 is output file for analysis 1
            for something...
            ...do something
                        out.write('\n')
                        out.write(info)

def analysis2(ffile):
    (similar to above, produces output file with info)

... and so on for the other analyses

def runAll(fns,i):
    proc = []
    for fnName in fns:
        fn = globals()[fnName]
        p = Process(target=fn, args=(i,))
        p.start()
        proc.append(p)
    for p in proc:
        p.join()

for ffile in files:

    runAll(analysistypes,ffile)

    ... rest of the code
我希望每个分析类型、每个traj文件都有一个输出文件。在本例中,每个traj文件需要3个输出文件(我有3个),因此总共有9个输出文件。这个很好用

问题是如果我开始尝试4种分析类型。一个输出文件将始终为空。它在那里,至少有一个标题,但数据根本不在那里。我100%确定这不是函数的问题,因为我已经分别尝试了100万次,但当我尝试同时运行4时,它只会出错。它甚至出现了这样一种情况,错误消息说:

。。。。得到了5列而不是5列

但这不是重点。终端“责备”的功能不一致,每次都会改变。另外,当我同时尝试5时,一个输出文件将是空白的,一个是半完整的,而其他文件则完全可以

(我还尝试只放置1个traj文件和5个分析类型,得到了相同的结果。)

我还在线查找解决方案并尝试了另一种方法:

我将for循环中的runAll替换为:

if __name__ == '__main__':
    procs = []
    for ana in analysistypes:
        anaa = globals()[ana]
        procs.append(Process(target=anaa, args=(ffile,)))
    map(lambda x: x.start(), procs)
    map(lambda x: x.join(), procs)
但它仍然不起作用,我得到了同样的结果。我怀疑每个轨迹文件的文件大小是12GB。我用的是Mac,操作系统是Ubuntu,硬盘空间是120GB,我已经用了55%。文件大小是否应该归咎于此