Skip to main content

Opinionated distributed RPC using AMQP workers

Project description

beef

Beef is good for your health.

An opinionated distributed RPC using AMQP messages (inspired by celery amqp backend).

Installing

pip install pybeef

Usage

Worker:

from beef import beef

@beef
async def add(x: int, y: int) -> int:
    return x + y

Server:

async def server():
    async with add.connect('amqp://localhost/'):
        await add.serve()  # here server blocks forever, executing incoming tasks

if __name__ == '__main__':
    import asyncio

    asyncio.run(server())

Client (blocking):

async def client():
    async with add.connect('amqp://localhost/'):
        task_id = await add.submit(1, 2)  # submits task
        result = await add.result(task_id)  # waits for completion

if __name__ == '__main__':
    import asyncio

    asyncio.run(client())

Client (polling):

import asyncio

async def client():
    async with add.connect('amqp://localhost/'):
        task_id = await add.submit(1, 2)  # submits task

        while True:
            status = await add.get_status(task_id)
            if status.is_final:
                break
            await asyncio.sleep(1)
        print(f'Task {task_id} completed with status {status})

if __name__ == '__main__':
    import asyncio

    asyncio.run(client())

Testing

You need a running RabbitMQ server for testing. For example:

docker run -it --network host rabbitmq

Then, make sure that test dependencies are installed:

pip install .[test]

Finally, run the tests

python -m pytest beef/test

or

make test

Building

pip wheel . --no-deps -w wheels/

or

make

Publishing

twine upload wheels/pybeef-XXX.whl -u __token__ -p <secret-pipy-token>

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pybeef-0.0.14-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file pybeef-0.0.14-py3-none-any.whl.

File metadata

  • Download URL: pybeef-0.0.14-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.11

File hashes

Hashes for pybeef-0.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 e87da697aa4589906418e0018ea3467c0c7edd726c18940137d935020d9b2707
MD5 a0bcbb737a555f9cfd9320f2c4f3904e
BLAKE2b-256 25d38480ce66e96fafb6634528d468e9ae453668f479b34963bf3fe4eba5b393

See more details on using hashes here.

Supported by

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