Because C modules can choose to release the GIL when they aren't using Python objects. If a CPU-heavy function is implemented in pure C, it can release the GIL using Python's C API. This allows the interpreter to run Python code for another thread. This makes mwparser faster.