This is a Python intended default behaviour.

The Scope

At present, this affects everything in thread.

Why Is This So?

This is due to Python's GIL (Global Interpreter Lock). At present, we only extend the featureset for the built-in threading library which means we are limited and bound by the GIL.

Check out this video by Tech With Tim (opens in a new tab) for a more in-depth explanation:

(Thanks Tim for letting us embed your video!)

What Does This Mean?

This means that threaded processes will only be able to fully utilise the one main Interpreter. Threaded processes still are able to run simultaneously with other processes, just limited to one Interpreter.

What If I Want True Parallel?

As outlined in the video above, you can achieve this with Python's built-in multiprocessing library.

Are There Plans to Provide True Parallelism in the Future?

Yes, and we are planning to add support for this in the future.

If you would like to help us with this or are simply interested, find out more here.