I am looking for a way to limit a python scripts CPU usage (not priority but the number of CPU cores) with python code.
Run you application with taskset
or numactl
.
For example, to make your application utilize only the first 4 CPUs do:
taskset --cpu-list 0-3 <app>
These tools, however, limit the process to use specific CPUs, not the total number of used CPUs. For best results they require those CPUs to be isolated from the OS process scheduler, so that the scheduler doesn’t run any other processes on those CPUs. Otherwise, if the specified CPUs are currently running other threads, while other CPUs are idle, your threads won’t be able to run on other idle CPUs and will have to queue up for these specific CPUs, which isn’t ideal.
Using cgroups
you can limit your processes/threads to use a specific fraction of available CPU resources without limiting to specific CPUs, but cgroups
setup is less trivial.