I have a series of tests in Django that are categorised into various "types", such as "unit", "functional", "slow", "performance", ...
Currently I'm annotating them with a decorator that is used to only run tests of a certain type (similar to @skipIf(...)), but this doesn't seem like an optimal approach.
I'm wondering if there is a better way to do separation of tests into types?  I'm open to using different test runners, extending the existing django testing framework, building suites or even using another test framework if that doesn't sacrifice other benefits.
The underlying reason for wanting to do this is to run an efficient build pipeline, and as such my priorities are to:

ensure that my continuous integration runs check the unit tests first,
possibly parallelise some test runs
skip some classes of test altogether
The way my company organises tests is to split them into two broad categories. Unit and functional. The unit tests live inside the Django test discovery. manage.py test will run them. The functional tests live outside of that directory. They are run either manually or by the CI. Buildbot in this case. They are still run with the unittest textrunner. We also have a subcategory of functional tests called stress tests. These are tests that can't be run in parallel because they are doing rough things to the servers. Like switching off the database and seeing what happens. 
The CI can then run each test type as a different step. Tests can be decorated with skipif. 
It's not a perfect solution but it is quite clear and easy to understand.
How to separate test types using Django