1. Interprocess queues¶
Turberfield provides a pipes module
for interprocess communication. Your programs can send and receive
messages consisting of simple Python objects.
The module provides interprocess Queues. Two variants are available; one for use with an asyncio event loop, and one for code written in a blocking-call style. Both variants accept the following Python structures: strings, bytes, numbers, tuples, lists, dicts, sets, booleans, and None.
The Queues are implemented with POSIX named pipes; this module works only on those operating systems which support them.
-
class
turberfield.utils.pipes.SimplePipeQueue(path, history=True)¶ Parameters: - path – supplies the path to the underlying POSIX named pipe.
- history – If True, a pipe which already exists will be reused, and not removed after exiting the Queue.
This class can send messages without blocking your code:
pq = SimplePipeQueue.pipequeue("/tmp/pq.fifo") pq.put_nowait((0, "First message.")) pq.close()
You can also use this class as a context manager. Don’t forget that
get()is a blocking operation:with SimplePipeQueue("/tmp/pq.fifo") as pq: msg = pq.get()
-
classmethod
pipequeue(*args, **kwargs)¶ This is a factory function which creates and initialises a Queue. Your code should call
close()on the queue when finished.
-
put_nowait(msg)¶ Put an item into the queue without blocking.
-
get()¶ Remove and return an item from the queue. If queue is empty, block until an item is available.
-
close()¶ Completes the use of the queue.
-
class
turberfield.utils.pipes.PipeQueue(*args, **kwargs)¶ Parameters: - path – supplies the path to the underlying POSIX named pipe.
- history – If True, a pipe which already exists will be reused, and not removed after exiting the Queue.
This is a subclass of
SimplePipeQueue, extended for use like an asyncio.Queue:pq = PipeQueue.pipequeue("/tmp/pq.fifo") yield from pq.put((0, "First message.")) pq.close()
and:
pq = PipeQueue.pipequeue("/tmp/pq.fifo") msg = yield from pq.get() pq.close()