2

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

4

0 回答 0