1
# -*- coding: utf-8 -*-
3
# Copyright © 2012 Pierre Raybaut
4
# Licensed under the terms of the MIT License
5
# (see spyderlib/__init__.py for details)
7
"""Operating system utilities"""
13
from spyderlib.utils import programs
16
def windows_memory_usage():
17
"""Return physical memory usage (float)
18
Works on Windows platforms only"""
19
from ctypes import windll, wintypes
20
class MemoryStatus(wintypes.Structure):
21
_fields_ = [('dwLength', wintypes.DWORD),
22
('dwMemoryLoad', wintypes.DWORD),
23
('ullTotalPhys', wintypes.c_uint64),
24
('ullAvailPhys', wintypes.c_uint64),
25
('ullTotalPageFile', wintypes.c_uint64),
26
('ullAvailPageFile', wintypes.c_uint64),
27
('ullTotalVirtual', wintypes.c_uint64),
28
('ullAvailVirtual', wintypes.c_uint64),
29
('ullAvailExtendedVirtual', wintypes.c_uint64),]
30
memorystatus = MemoryStatus()
31
# MSDN documetation states that dwLength must be set to MemoryStatus
32
# size before calling GlobalMemoryStatusEx
33
# http://msdn.microsoft.com/en-us/library/aa366770(v=vs.85)
34
memorystatus.dwLength = wintypes.sizeof(memorystatus)
35
windll.kernel32.GlobalMemoryStatusEx(wintypes.byref(memorystatus))
36
return float(memorystatus.dwMemoryLoad)
38
def psutil_phymem_usage():
39
"""Return physical memory usage (float)
40
Requires the cross-platform psutil (>=v0.3) library
41
(http://code.google.com/p/psutil/)"""
43
return psutil.phymem_usage().percent
45
if programs.is_module_installed('psutil', '>=0.3.0'):
46
# Function `psutil.phymem_usage` was introduced in psutil v0.3.0
47
memory_usage = psutil_phymem_usage
49
# Backup plan for Windows platforms
50
memory_usage = windows_memory_usage
52
raise ImportError, "Feature requires psutil 0.3+ on non Windows platforms"
55
if __name__ == '__main__':
57
print memory_usage.__doc__
60
print windows_memory_usage.__doc__
61
print windows_memory_usage()