code: public SpoutDeclarer setSpout(String id, IRichSpout spout, Number parallelism_hint) throws IllegalArgumentException {
          validateUnusedId(id);
          initCommon(id, spout, parallelism_hint);
          _spouts.put(id, spout);
          return new SpoutGetter(id);
      }
docs: Define a new spout in this topology with the specified parallelism. If the spout declares
  itself as non-distributed, the parallelism_hint will be ignored and only one task
  will be allocated to this component.
  
  @param id the id of this component. This id is referenced by other components that want to consume this spout's outputs.
  @param parallelism_hint the number of tasks that should be assigned to execute this spout. Each task will run on a thread in a process somewhere around the cluster.
  @param spout the spout
  @throws IllegalArgumentException if {@code parallelism_hint} is not positive