You haven't proven anything, you have tons of variables you have not isolated. Python version, operating system version, hardware resources, VM resource quotas, CPU model, and on and on.
Profile what functions in your code specifically are taking the time. Visualize it with flame graphs. Python based stack sampling implementation would be nice, but I don't know how well that captures C functions. You may want to try operating system based profilers (eBPF, xperf) in that case, which have better visibility into the C library and the OS.
Study in detail what functions are slow. Get an idea of what it does, get the source code if possible. Count system calls to measure what it is requesting of the operating system.
Find the limiting resource: CPU, memory, disk, network. Measure those resources at the host level via performance monitoring tools.
Contrast the results on different environments, bare metal, different types of VMs, different hardware. Do not overcommit resources on your VM hosts, not CPU and definitely not RAM. That is unfair when compared to a bare metal dedicated host.
Really, this is a general performance investigation to discover what the limiting factor is in your environment. Using Python just may change the code runtime to profile and optimize.