Transaction decorator not working with Tornado and Python 3.5's "async"
This doesn't seem like a peewee issue to me, as peewee doesn't know about your event loop and is designed using normal python APIs. I am not familiar with tornado/twisted so I can't really offer much more in the way of advice for debugging this.
 Understood. Thanks for having a look!

The transaction decorator doesn't rollback correctly when used with an async function in Tornado.

```
@database.transaction()
async def test_txn():
    Test.create()
    raise Exception()
```

Results of test code:

```
$ py peeweetest.py 
<function test_asyncio at 0x10e033ea0>
Success

<function test_tornado at 0x10e24b2f0>
Failed
```

Here's some test code, using Python 3.5, Peewee, and Tornado:

```
import asyncio
import peewee
import tornado.ioloop


# Database setup
database = peewee.SqliteDatabase('testdb')
database.connect()

class Model(peewee.Model):
    class Meta:
        database = database

database.create_tables([Model], safe=True)


@database.transaction()
async def test_txn():
    Model.create()
    raise Exception()


def test_asyncio():
    # Start event loop, then block until test completes
    return (asyncio.get_event_loop()
        .run_until_complete(test_txn))


def test_tornado():
    # Start event loop, then block until test completes
    return (tornado.ioloop.IOLoop.instance()
        .run_sync(test_txn))


# Run tests
for test in (test_asyncio, test_tornado):
    print(test)

    count_before = Model.select().count()

    try:
        test()
    except Exception:
        pass

    count_after = Model.select().count()

    # Compare Model counts, they should be the same before and after
    if count_before == count_after:
        print('Success')
    else:
        print('Failed')
    print()
```

Manual transactions seem to work fine.  I suspect this may have something to do with Tornado's generator based co-routine support where you raise an Exception to return a value. I'm really not sure though.
