我有一个需要通过 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 在多处理环境中运行时存在一些问题。我错过了什么吗?谢谢。