Preliminary SLC API

Helper functions / structures


Namedtuple specifying serialization protocols.

  • protocol – Protocol name.
  • version – Protocol version.
  • dumps – Callable that performs the serialization. Use a partial to specify the function arguments.
  • loads – Callable that performs the reverse serialization.

alias of serializer


Namedtuple specifying compressors.

  • name – Compressor name.
  • version – Compressor version.
  • comp – Callable that performs the compression. Use a partial to specify the function arguments.
  • decomp – Callable that performs the decompression.

alias of compressor


Communicator Class

class slc.Communicator(self, secure=False, compress=None, serializer=slc.SER_BEST, buffer_cap=slc.INFINITE, timeout=30, retries=INFINITE, protocol="tcp")[source]

Builds a new communicator.

  • secure – Use encryption and authentication. This makes the messages readable only by the target and validates the authenticity of the sender.
  • compress – Compression scheme to use. None deactivates compression. See slc.COMPRESSOR.
  • serializer – Namedtuple representing the serialization protocol. See slc.SERIALIZER.
  • buffer_cap – Maximum sending buffer capacity. Past this capacity, sending data will block. (TODO)
  • timeout – Timeout in seconds before a connection attempt is considered failed.
  • retries – Number of retries before a socket is considered disconnected. After this number of retries, subsequent operations on the communicator will raise an exception.
  • protocol – Underlying protocol to use (‘tcp’, ‘udp’, ‘icmp’). Only ‘tcp’ is supported as of now.

Advertise the current server on the network.

TODO: Add support for IPv6.

Parameters:name – Name to advertise.
connect(self, port, host='', timeout=INFINITE, source_address=ALL)[source]

Connect to a socket that prealably performed a listen().

  • port – Target port connect.
  • host – Target host.
  • timeout – Maximum time to wait. slc.INFINITE means blocking. 0 means non-blocking. Any strictly positive number means to wait for this maximum time in seconds to wait. An error is raised in the latter case if no data is received.
  • source_address – Address on which to perform the connection. None means all available interfaces.
disconnect(self, target=ALL, timeout=INFINITE)[source]

Disconnect target(s) from the communicator.

  • target – Target to disconnect. slc.ALL means disconnect all peers. A tuple (host, port) means to disconnect this particular target. A list of tuples disconnects the targets in the list.
  • timeout – Timeout to ensure all data is sent before disconnecting. slc.INFINITE means blocking, 0 means disconnect and discard pending messages and any positive number is the maximum time to wait before discarding the messages (TODO: Or raising an exception?).

Discover the sockets advertising on the local network.

Parameters:name – Name to discover. Defaults to discover everything.
forward(source, target)[source]

Move awaiting messages of source to target.

is_acknowledged(self, message_id, target=ALL)[source]

Returns if the message represented by message_id has been successfully received by the pair.

  • message_id – Message ID provided by send.
  • target – Check for a given target or list of targets. If there are multiple targets, the function will return true only if all targets have acknowledged the message.
listen(port=0, host='')[source]

Act as a server. Allows other communicators to connect() to it.

  • port – Port on which to listen. Default (0) is to let the operating system decide which port, available on the variable port.
  • host – Host address on which to listen to.
receive(self, source=ALL, timeout=INFINITE)[source]

Receive data from the peer.

  • source – Tuple (host, port) from which to receive from.
  • timeout – Maximum time to wait. slc.INFINITE means blocking. 0 means non-blocking. Any strictly positive number means to wait for this maximum time in seconds to wait. An error is raised in the latter case if no data is received.

src, obj

recv(self, source=ALL, timeout=INFINITE)[source]

Receive data. Same as receive(), but won’t provide the peer address.

send(self, data, target=ALL, raw=False)[source]

Send data to peer(s).

  • data – Data to send. Can be any type serializable by the chosen serialization protocol if raw is False. If raw is True, data must have a file-like interface, such as a bytes type.
  • target – Target peer to send the data to. If None, send to all peers. If set to a tuple of (host, port), send only to this peer. If set to a list of tuples, only send to these particular targets.
  • raw – If the data must be serialized or not before sending.

Message ID. Can be used to determine whether or not this message has been acknowledged by all its recipients.


Disconnects every peer and shutdowns the communicator.


Stops advertising the socket.

Indices and tables