code: def array(args):
      
      p = OptionParser(array.__doc__)
      p.set_grid_opts(array=True)
      p.set_params(prog="grid")
      opts, args = p.parse_args(args)
  
      if len(args) != 1:
          sys.exit(not p.print_help())
  
      cmds, = args
      fp = open(cmds)
      N = sum(1 for x in fp)
      fp.close()
  
      pf = cmds.rsplit(".",  1)[0]
      runfile = pf + ".sh"
      assert runfile != cmds, \
              "Commands list file should not have a `.sh` extension"
  
      engine = get_grid_engine()
      threaded = opts.threaded or 1
      contents = arraysh.format(cmds) if engine == "SGE" \
                  else arraysh_ua.format(N, threaded, cmds)
      write_file(runfile, contents)
  
      if engine == "PBS":
          return
  
      outfile = "{0}.{1}.out".format(pf, "\$TASK_ID")
      errfile = "{0}.{1}.err".format(pf, "\$TASK_ID")
      p = GridProcess("sh {0}".format(runfile), outfile=outfile, errfile=errfile,
                      arr=N, extra_opts=opts.extra, grid_opts=opts)
      p.start()
docs: %prog array commands.list
  
      Parallelize a set of commands on grid using array jobs.