Pipelines
The Pipeline
class is a subclass of StatsClient
that
batches together several stats before sending. It implements the entire client
interface, plus a send()
method.
Pipeline
objects should be created with
StatsClient.pipeline()
:
client = StatsClient()
pipe = client.pipeline()
pipe.incr('foo')
pipe.decr('bar')
pipe.timing('baz', 520)
pipe.send()
No stats will be sent until send()
is called, at
which point they will be packed into as few UDP packets as possible.
As a Context Manager
Pipeline
objects can also be used as context managers:
with StatsClient().pipeline() as pipe:
pipe.incr('foo')
pipe.decr('bar')
Pipeline.send()
will be called automatically when the managed block
exits.
Thread Safety
While StatsClient
instances are considered thread-safe (or at least
as thread-safe as the standard library’s socket.send
is),
Pipeline
instances are not thread-safe. Storing stats for later
creates at least two important race conditions in a multi-threaded environment.
You should create one Pipeline
per-thread, if necessary.