Skip to main content

Asynchronous Fan Out/In for Pyramid.

Project description

Run an asyncio loop in it's own thread for scheduling awaitables from within Pyramid views.

This adds request property loop and request methods wait_for, wait_results, and await.

The loop property returns the loop running in it's own thread. Use this loop with asyncio.run_coroutine_threadsafe to run awaitables. For example:

    import asyncio
    from concurrent import futures

    def my_view(request):
        running = asyncio.run_coroutine_threadsafe(my_coroutine(), request.loop)
        done, not_done = futures.wait([running, ...], timeout=3)
        results = [ftr.result() for ftr in done]
        return {'done': results}

The wait_for method reduces the above boiler plate by waiting for the futures. Example usage

    def my_view(request):
        done, not_done = request.wait_for([my_coroutine(), ...])
        results = [ftr.result() for ftr in done]
        return {'done': results}

The wait_results method reduces the boiler plate further by returning the results after waiting. This is useful if you don't care about unfinished tasks. Example usage:

    def my_view(request):
        results = request.wait_results([my_coroutine(), ...])
        return {'done': results}

The await method runs a single awaitable and blocks until it's results are complete or timeout passes. Example usage:

    from loopworker import AwaitableTimeout

    def my_view(request):
        try:
            result = request.await(my_coroutine(), timeout=3)
        except AwaitableTimeout:
            result = 'not completed'
        return {'result': result}

Use as any other Pyramid plugin:

    config.include('frond')

Currently this package only supports Python 3 (and only tested on Python >=3.6).

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

frond-0.0.3.tar.gz (2.9 kB view hashes)

Uploaded Source

Built Distribution

frond-0.0.3-py3-none-any.whl (3.4 kB view hashes)

Uploaded Python 3

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