Metadata-Version: 2.1
Name: asyncbg
Version: 0.12.0
Summary: Asyncio background tasks.
Home-page: https://github.com/eerimoq/asyncbg
Author: Erik Moqvist
Author-email: erik.moqvist@gmail.com
License: MIT
Keywords: asyncio
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
License-File: LICENSE

|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
