def _read(self): """ Read one packet, publish if appropriate, then return. We must not read all packets in a loop here, or we will not actually publish them until the end... """ if self._filehandle is None and not self.files: log.msg('Completed reading specified port agent logs, exiting...') reactor.stop() return if self._filehandle is None: name = self.files.pop(0) log.msg('Begin reading:', name) self._filehandle = open(name, 'r') packet = Packet.packet_from_fh(self._filehandle) if packet is not None: if packet.header.packet_type in self.target_types: self.router.got_data([packet]) else: self._filehandle.close() self._filehandle = None # allow the reactor loop to process other events reactor.callLater(0.01, self._read)