Before you get started with this article, it is important to note that the resource
module is a UNIX specific package, and will not work in the POSIX, i.e. Windows Operating System.
Introduction to the resource module
During the process of working with system monitoring and resources, we find ourselves wondering if there’s a better to monitor system information rather than manually go through all the system logs in the control panel.
A little more down the trail of forming an idea related to that concept, we come to a slight understanding that this might be possible, and completely feasible in the form of a script.
Well, looking a little further into the line of thought, it’s a great idea!
Automating the script with python-crontab
, sched
and the dateutil module, would provide for an automatic update log scheduled at a particular interval everyday, so, you don’t have to manually receive information at a particular time.
But, before trying to automate it, we’ll need something that can first provide you with this information, and that’s where the resource
module comes into play.
Used for providing basic information regarding the system resources, and functionality to control it as well, the resource
module is exactly what we’re looking for.
So, let’s cut to the chase, and get started with working on the module!
Using the resource module in Python
Being a part of the standard library in Python, the resource
module is one that does not need to be installed separately, and this means that working with the module on a fresh new server or client with Python installed should come automatically without any issue.
However, it is reported that some versions of python do seem to face any issue with the resource module, and as such, it is recommended to install the resource module using the pip command.
pip install python-resources
Now that we’re done with that, we still need to use its components to retrieve the required information, so, let’s get importing!
1.0 Setting up the ecosystem
Before we begin working with the functionality that is provided to us by the resource
module, we’ll need to first import the module.
# Importing functions from the resource module
from resource import *
import time
Now that we have the modules imported, we can now begin retrieving information on the system resources.
1.1 The underlying parameter usage
The functionality of the module mainly depends on the parameters that are provided to the function that returns the required information.
A few examples of these parameters are,
resource.RUSAGE_SELF
– Resources consumed by calling process.resource.RUSAGE_CHILDREN
– Resources consumed by children processes.resource.RUSAGE_BOTH
– Resources consumed by current and children processes.resource.RUSAGE_THREAD
– Resources consumed by current thread.
All of these RUSAGE_* symbols are passed to the getrusage()
function to specify which process information was requested for.
1.2 Demonstration
# Function used to retrieve information regarding
## Resources consumed by the current process or it's children
### Non CPU bound task
time.sleep(3)
# Calling for the resources consumed by the current process.
print(getrusage(RUSAGE_SELF))
### CPU bound task
for i in range(10**8):
_ = 1+1
# Calling for the resources consumed by the current process.
print(getrusage(RUSAGE_SELF))
# Output
# resource.struct_rusage(ru_utime=0.016, ru_stime=0.004, ru_maxrss=5216, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=732, ru_majflt=1, ru_nswap=0, ru_inblock=80, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=6, ru_nivcsw=9)
# resource.struct_rusage(ru_utime=14.176, ru_stime=0.02, ru_maxrss=5140, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=730, ru_majflt=0, ru_nswap=0, ru_inblock=0, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=1, ru_nivcsw=177)
The output that we receive is in the form of an resource class object, with all the necessary information requested for in the structure of the object.
Each of these output values in the structure are floating point values representing the amount of time spent in executing in user and system mode respectively.
In case you wish to find out more about each of the parameters or wish to look into the module as a whole, you might be interested in visiting the getrusage()
section in the documentation page.
1.3 Moving forward
Working with this module should have provided you with an idea about the resources that can be retrieved by the resource
module.
Extending this module and implementing it in a script would be to monitor the system processes and check into the resource consumption in regular intervals.
In case you wish to work with such an idea, it would be wise to look into various other modules like the psutil
, sys
, and os
module to work with system processes.
In order to schedule the checks to be automatic, you might wish to look into working with the dateutil
, sched
and python-crontab
modules.
Conclusion
The use cases for this module are mostly involved in working with the creation of scripts which tend to monitor the system’s functioning and processes.
If you wish to work with system processes, testing and monitoring, as mentioned in the previous section, the articles you should look into are the psutil, sys, os, and the dateutil module.