asyncbg icon indicating copy to clipboard operation
asyncbg copied to clipboard

Asyncio background tasks

|buildstatus|_ |coverage|_

Asyncio background tasks

Asyncio background tasks in Python 3.7 and later.

Run CPU intensive long running tasks without blocking the asyncio loop, implemented as a lightweight asyncio layer on top of the multiprocessing module.

Alternatively run tasks in other threads.

Project homepage: https://github.com/eerimoq/asyncbg

Documentation: https://asyncbg.readthedocs.org/en/latest

Installation

.. code-block:: python

pip install asyncbg

Examples

There are more examples in the examples folder_.

Call

Call work(a, b) in another process. The script output is Result: 9.

.. code-block:: python

import asyncio import asyncbg

def work(a, b): return a + b

async def main(): result = await asyncbg.call(work, 4, 5) print(f'Result: {result}')

asyncio.run(main())

Process pool

Create a process pool with two workers, and call work() three times in it (up to two callbacks called in parallel).

.. code-block:: python

import asyncio import asyncbg

def work(): pass

async def main(): with asyncbg.ProcessPoolExecutor(max_workers=2) as pool: await asyncio.gather(pool.call(work), pool.call(work), pool.call(work))

asyncio.run(main())

Call thread

Call work(a, b) in another thread. The script output is Result: 9.

.. code-block:: python

import asyncio import asyncbg

def work(a, b): return a + b

async def main(): result = await asyncbg.call_thread(work, 4, 5) print(f'Result: {result}')

asyncio.run(main())

Thread pool

Create a thread pool with two workers, and call work() three times in it (up to two callbacks called in parallel).

.. code-block:: python

import asyncio import asyncbg

def work(): pass

async def main(): with asyncbg.ThreadPoolExecutor(max_workers=2) as pool: await asyncio.gather(pool.call(work), pool.call(work), pool.call(work))

asyncio.run(main())

.. |buildstatus| image:: https://travis-ci.org/eerimoq/asyncbg.svg?branch=master .. _buildstatus: https://travis-ci.org/eerimoq/asyncbg

.. |coverage| image:: https://coveralls.io/repos/github/eerimoq/asyncbg/badge.svg?branch=master .. _coverage: https://coveralls.io/github/eerimoq/asyncbg

.. _examples folder: https://github.com/eerimoq/asyncbg/tree/master/examples