<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def pause(self):
 """ Pauses a running pipeline. This will stop retrieving results from the pipeline. Parallel parts of the pipeline will stop after the ``NuMap`` buffer is has been filled. A paused pipeline can be run or stopped. """

        # 1. stop the plumbing thread by raising a StopIteration on a stride 
        #    boundary
        if self._started.isSet() and \
           self._running.isSet() and \
           not self._pausing.isSet():
            self._pausing.set()
            self._plunger.join()
            del self._plunger
            self._pausing.clear()
            self._running.clear()
        else:
            raise PlumberError