Mike <mcnelson....@gmail.com> added the comment:

Is this issue still being worked on as a core feature? I needed a solution for 
this using 2.7.11 to enable some old code to work properly/nicely in a 
container environment on AWS Batch and was forced to figure out what OpenJDK 
was doing and came up with a solution. The process in OpenJDK seems to be, find 
where the cgroups for docker are located in the file system, then depending on 
the values in different files you can determine the number of CPUs available. 

The inelegant code below is what worked for me:

def query_cpu():
        if os.path.isfile('/sys/fs/cgroup/cpu/cpu.cfs_quota_us'):
                cpu_quota = 
int(open('/sys/fs/cgroup/cpu/cpu.cfs_quota_us').read().rstrip())
                #print(cpu_quota) # Not useful for AWS Batch based jobs as 
result is -1, but works on local linux systems
        if cpu_quota != -1 and 
os.path.isfile('/sys/fs/cgroup/cpu/cpu.cfs_period_us'):
                cpu_period = 
int(open('/sys/fs/cgroup/cpu/cpu.cfs_period_us').read().rstrip())
                #print(cpu_period)
                avail_cpu = int(cpu_quota / cpu_period) # Divide quota by 
period and you should get num of allotted CPU to the container, rounded down if 
fractional.
        elif os.path.isfile('/sys/fs/cgroup/cpu/cpu.shares'):
                cpu_shares = 
int(open('/sys/fs/cgroup/cpu/cpu.shares').read().rstrip())
                #print(cpu_shares) # For AWS, gives correct value * 1024.
                avail_cpu = int(cpu_shares / 1024)
        return avail_cpu


This solution makes several assumptions about the cgroup locations within the 
container vs dynamically finding where those files are located as OpenJDK does. 
I also haven't included the more robust method in case cpu.quota and cpu.shares 
are -1.

Hopefully this is a start for getting this implemented.

----------
nosy: +mcnelsonphd

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue36054>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to