Python has something named the GIL (Global Interpreter Lock) which prevents any kind of shared memory parallelism and even sometimes message based parallelism. In theory, it is possible to serialize objects if they are small but most Python bindings don’t and won’t implement what is required for bringing parallelism capacity.
As a result, many Python programs with huge amount of work to bring serialization support across all dependencies/subdependencies are finding themselves having to rely on single-thread CPU performance with running during weeks on a specific problem still in 2022!
And unlike languages like Java, Python uses reference counting instead of garbage collection in a separate thread which adds work in an already single-thread-bound language.
On the other hand, languages like C++ or Fortran don’t suffer from the warm up time of JIT languages like Java or JavaScript nor the slow execution speed of language like Python or/along the Cythonized version.