Skip to main content

A python remote communications library

Project description

kiwipy

Travis CI Latest Version https://img.shields.io/pypi/wheel/kiwipy.svg https://img.shields.io/pypi/pyversions/kiwipy.svg https://img.shields.io/pypi/l/kiwipy.svg

kiwipy is a library that makes remote messaging using RabbitMQ (and any other protocol for which a backend is written) EASY. I don’t know about you but I find RabbitMQ HARD. It’s all too easy to make a configuration mistake which is then difficult to debug. With kiwipy, there’s none of this, just messaging, made simple, with all the nice properties and guarantees of AMQP.

Here’s what you get:

  • RPC

  • Broadcast (with filters)

  • Task queue messages

Let’s dive in, with some examples taken from the rmq tutorial.

RPC

The client:

from kiwipy import rmq

communicator = rmq.RmqThreadCommunicator.connect(connection_params={'url': 'amqp://localhost'})

# Send an RPC message
print(" [x] Requesting fib(30)")
response = communicator.rpc_send('fib', 30).result()
print((" [.] Got %r" % response))

(rmq_rpc_client.py source)

The server:

import threading

from kiwipy import rmq


def fib(comm, num):
    if num == 0:
        return 0
    if num == 1:
        return 1

    return fib(comm, num - 1) + fib(comm, num - 2)


communicator = rmq.RmqThreadCommunicator.connect(connection_params={'url': 'amqp://localhost'})

# Register an RPC subscriber with the name square
communicator.add_rpc_subscriber(fib, 'fib')
# Now wait indefinitely for fibonacci calls
threading.Event().wait()

(rmq_rpc_server.py source)

Worker

Create a new task:

import sys

from kiwipy import rmq

message = ' '.join(sys.argv[1:]) or "Hello World!"

with rmq.RmqThreadCommunicator.connect(connection_params={'url': 'amqp://localhost'}) as communicator:
    communicator.task_send(message)

(rmq_new_task.py source)

And the worker:

import time
import threading

from kiwipy import rmq

print(' [*] Waiting for messages. To exit press CTRL+C')


def callback(_comm, task):
    print((" [x] Received %r" % task))
    time.sleep(task.count(b'.'))
    print(" [x] Done")


try:
    with rmq.RmqThreadCommunicator.connect(connection_params={'url': 'amqp://localhost'}) as communicator:
        communicator.add_task_subscriber(callback)
        threading.Event().wait()
except KeyboardInterrupt:
    pass

(rmq_worker.py source)

Versioning

This software follows Semantic Versioning

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kiwipy-0.3.4.tar.gz (33.3 kB view details)

Uploaded Source

Built Distribution

kiwipy-0.3.4-py2.py3-none-any.whl (19.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file kiwipy-0.3.4.tar.gz.

File metadata

  • Download URL: kiwipy-0.3.4.tar.gz
  • Upload date:
  • Size: 33.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6

File hashes

Hashes for kiwipy-0.3.4.tar.gz
Algorithm Hash digest
SHA256 99baf5089434cace49501a2dd5e81ee05fd4a81dad3fe03f27c041307d361128
MD5 3eb7253b4286739ef24a7f3aa105e87c
BLAKE2b-256 23f6be2ef03ffafd5a2ee5373c95ab38a0889c6da25464e0350dc8f9646e8218

See more details on using hashes here.

Provenance

File details

Details for the file kiwipy-0.3.4-py2.py3-none-any.whl.

File metadata

  • Download URL: kiwipy-0.3.4-py2.py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6

File hashes

Hashes for kiwipy-0.3.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e9fedf60d158a4f7febf27dabbff2361636a5bf84abd2db92323a80e178f4046
MD5 9b2b40def2c59936d5228ed6c9b41ad0
BLAKE2b-256 5dba2894704dba19a956028044a0e4bfa25bcc9d9dddc42a27548bee74d92950

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page