def feed(self, data):
self._lock.acquire()<EOL>try:<EOL><INDENT>if self._event is not None:<EOL><INDENT>self._event.set()<EOL><DEDENT>self._buffer_frombytes(b(data))<EOL>self._cv.notifyAll()<EOL><DEDENT>finally:<EOL><INDENT>self._lock.release()<EOL><DEDENT>
Feed new data into this pipe.  This method is assumed to be called
from a separate thread, so synchronization is done.

:param data: the data to add, as a ``str`` or ``bytes``