Package core :: Module streams :: Class Pump

[hide private]
[frames] | no frames]

# Class Pump

source code

    object --+
             |
            Pump

Pumps data from a ReadStream to a WriteStream and performs flow control where necessary to prevent the write stream from getting overloaded.

Instances of this class read bytes from a ReadStream and write them to a WriteStream. If data can be read faster than it can be written this could result in the write queue of the WriteStream growing without bound, eventually causing it to exhaust all available RAM. To prevent this, after each write, instances of this class check whether the write queue of the WriteStream is full, and if so, the ReadStream is paused, and a WriteStreamdrain_handler is set on the WriteStream. When the WriteStream has processed half of its backlog, the drain_handler will be called, which results in the pump resuming the ReadStream.

This class can be used to pump from any ReadStream to any WriteStream, e.g. from an HttpServerRequest to an AsyncFile, or from NetSocket to a WebSocket.

Instance Methods | [hide private]

__init__(self, read_stream, write_stream) | source code

set_write_queue_max_size(self, val) Set the write queue max size | source code

start(self) Start the Pump. | source code

stop(self) Stop the Pump. | source code

bytes_pumped(self) return the total number of bytes pumped by this pump. | source code

Class Variables | [hide private]

| write_queue_max_size = `property(fset= set_write_queue_max_size)`

Method Details | [hide private]

### __init__(self, read_stream, write_stream)
(Constructor)

source code

Overrides: object.__init__
  (inherited documentation)

### set_write_queue_max_size(self, val)

source code

Set the write queue max size

Keyword arguments:

Parameters:
  - `val` - The write queue max size

### start(self)

source code

Start the Pump. The Pump can be started and stopped multiple times.

### stop(self)

source code

Stop the Pump. The Pump can be started and stopped multiple times.

### bytes_pumped(self)

source code

return the total number of bytes pumped by this pump.

Decorators:
  - `@property`