# AsyncIO Utilities

Guillotina comes with some amazing utilities to make working with
AsyncIO a bit easier.

Of those, Guillotina provides functions to run asynchronous functions
in a queue or a pool.


For example, sending an email:

```python

from guillotina import configure
from guillotina.utils import execute


async def send_email(to_, from_, subject, body):
    pass


@configure.service(name='@myservice', method='GET',
                   permission='guillotina.AccessContent')
async def my_service(context, request):
    execute.in_pool(
        send_email, 'foo@bar', 'foo@bar', 'Hello!', 'Some body!').after_request()
    return {
        'foo': 'bar'
    }

```

This will execute the function `send_email` in an asynchronous pool after the request is finished.

The functions `execute.in_queue`, `execute.in_queue_with_func`, `execute.after_commit` and `execute.before_commit` are also available.

See the [full specification](../api/utils.html#module-guillotina.utils.execute).