code: def runner(view, parallel, dirs, config):
      
      def run(fn_name, items):
          setpath.prepend_bcbiopath()
          out = []
          fn, fn_name = (fn_name, fn_name.__name__) if callable(fn_name) else (_get_ipython_fn(fn_name, parallel), fn_name)
          items = [x for x in items if x is not None]
          items = diagnostics.track_parallel(items, fn_name)
          logger.info("ipython: %s" % fn_name)
          if len(items) > 0:
              items = [config_utils.add_cores_to_config(x, parallel["cores_per_job"], parallel) for x in items]
              if "wrapper" in parallel:
                  wrap_parallel = {k: v for k, v in parallel.items() if k in set(["fresources"])}
                  items = [[fn_name] + parallel.get("wrapper_args", []) + [wrap_parallel] + list(x) for x in items]
              items = zip_args([args for args in items])
              for data in view.map_sync(fn, items, track=False):
                  if data:
                      out.extend(unzip_args(data))
          return out
      return run
docs: Run a task on an ipython parallel cluster, allowing alternative queue types.
  
      view provides map-style access to an existing Ipython cluster.