def start(self, datas):
if not self._started.isSet() andnot self._running.isSet() andnot self._pausing.isSet():<EOL><INDENT>self.stats = {}<EOL>self.stats['<STR_LIT>'] = None<EOL>self.stats['<STR_LIT>'] = None<EOL>self.connect_inputs(datas)<EOL>self.connect()<EOL>self.stats['<STR_LIT>'] = {}<EOL>for piper in self.postorder():<EOL><INDENT>if hasattr(piper.imap, '<STR_LIT>') and piper.track:<EOL><INDENT>self.stats['<STR_LIT>'][piper] =[piper.imap._tasks_tracked[t.task] for t in piper.imap_tasks]<EOL><DEDENT><DEDENT>self.stats['<STR_LIT>'] = time()<EOL>super(Plumber, self).start()<EOL>self._started.set()<EOL>self._finished.clear()<EOL><DEDENT>else:<EOL><INDENT>raise PlumberError<EOL><DEDENT>
Starts the pipeline by connecting the input ``Pipers`` of the pipeline 
to the input data, connecting the pipeline and starting the ``NuMap``
instances.

The order of items in the "datas" argument sequence should correspond 
to the order of the input ``Pipers`` defined by ``Dagger._cmp`` and 
``Piper.ornament``.

Arguments:

  - datas(sequence) A sequence of external input data in the form of 
    sequences or iterators.