我是Python和Multiprocessing的新手。
总结问题:我正在运行一个包含Pool.map(function,list_args)的.py可执行文件,它调用的函数包含行os.system(),它在与初始目录相同的目录中执行.csh文件.py可执行文件。此.csh可执行文件创建一个新文件夹并将工作目录移动到该文件夹中。我相信我的代码失败的地方,我相信os.system()不会等待.csh可执行文件完成。
(Ubuntu是我电脑上的操作系统)。
以下是代码的一部分:
import sys
import os
import multiprocessing as mp
import time
def phenix(FILES):
os.system("mkdir temp_"+str(FILES))
time.sleep(1)
os.system("cp 5k10_only_atoms.pdb.mtz "+str(FILES)+" temp_"+str(FILES)+"/")
retval = os.getcwd()
time.sleep(1)
os.chdir(str(retval)+"/temp_"+str(FILES))
time.sleep(1)
os.system("./phenix.get_cc_mtz_pdb 5k10_only_atoms.pdb.mtz "+str(FILES)+" scale=True fix_xyz=True >> grabado")
os.chdir(retval)
#THE USER INPUTS VALUES FOR THE VARIABLES cores AND list_files
if __name__ == '__main__':
p = mp.Pool(cores)
p.map(phenix,list_files)
命令行
./ phenix.get_cc_mtz_pdb 5k10_only_atoms.pdb.mtz .....等等
运行一些比较值的计算,包括文件5k10_only_atoms.pdb.mtz和FILES(另一个文件,例如“file-01”)。正是这个命令行 phenix.get_cc_mtz_pdb 创建了另一个文件夹(称为temp_dir)并将工作目录移入其中以进行一些计算并写出文件。
我再次确信这是出错的地方,因为除了创建名为temp_dir的文件夹之外,phenix命令从不做任何事情。只有当phenix(.csh可执行文件)尝试更改工作目录时,os.system()才会等待任何返回,并且我的.py可执行文件继续执行下一个命令。
他们有什么办法让我的phenix可执行文件完成它的工作,而不是等待它完成os.system()?
注意:我无法修改此phenix(.csh)可执行文件。当我直接在终端上运行时,phenix命令行也能正常工作。