我有一个命令列表,我需要通过lsf服务器场运行(使用"qsub -I"
)。
让我们说这些命令列在commands_l中。我正在使用多处理模块尝试一次运行2个进程。 (我正在使用linux)
以下是代码:
import subprocess, multiprocessing
import os,sys,os.path
def execCmd(cmd):
""" Executes the command """
print "Executing:",cmd
ret = subprocess.call(cmd,shell=True)
return ret
if __name__=="__main__":
commands_l = ['qsub -P test -I ls -l', 'qsub -P test -I df -kh', 'qsub -P test -I du -kh .']
results_l = []
errorcodes_l = []
max_proc = 2
pool = multiprocessing.Pool(processes=max_proc)
for command in commands_l:
print "# %s" % (command)
errorcode = pool.apply_async(execCmd, (command,), callback=results_l.append)
errorcodes_l.append(errorcode)
pool.close()
pool.join()
print "Results:", results_l
sys.exit(0)
我面临的问题是执行因输出而受阻:
# qsub -P test -I ls -l
# qsub -P test -I df -kh
# qsub -P test -I du -kh .
Executing: qsub -P test -I ls -l
Executing: qsub -P test -I df -kh
Job <1683534> is submitted to queue <q_interactive>.
<<Waiting for dispatch ...>>
Job <1683535> is submitted to queue <q_interactive>.
<<Waiting for dispatch ...>>
<<Starting on machine-23>>
<<Starting on machine-20>>
奇怪的是,当我使用相同的命令“qsub -P test -I ls -l”单独运行execCmd时,它运行正常。
>>> import multiprocess_qsub # my py file that contains the abovementioned code
>>> multiprocess_qsub.execCmd("qsub -P test -I ls -l")
Executing: qsub -P test -I ls -l
Job <1687635> is submitted to queue <q_interactive>.
<<Waiting for dispatch ...>>
<<Starting on machine-02>>
total 3
-rwx------ 1 tully user 2959 Jul 5 14:54 functions.py
-rwx------ 1 tully user 906 Jun 27 23:06 gui.py
-rw------- 1 tully user 1684 Jul 13 14:24 multiprocess_qsub.py
在我看来,qsub在多处理环境中运行时存在一些问题。我错过了什么吗?感谢。