多处理环境中的python subprocess qsub命令

时间:2012-07-14 18:09:01

标签: python subprocess multiprocessing qsub

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

0 个答案:

没有答案