threading or it has held the gil for certain amount of time if the maximum time that thread can hold the gil has been met the scheduler will release the gil from that thread (resulting it stopping execution and now having to wait until it has the gil returned to itand will select another thread to gain the gil and start to execute it is thus impossible for standard python threads to take advantage of the multiple cpus typically available on modern computer hardware one solution to this is to use the python multiprocessing library described in the next online resources see the following online resources for information on the topics in this documentation on threading threading threading module exercise create function called printer(that takes message and maximum value to use for period to sleep within the function create loop that iterates times within the loop generate random number from to the max period specified and then sleep for that period of time you can use the random randint(function for this once the sleep period has finished print out the message passed into the function then loop again until this has been repeated times now create five threads to run five invocations of the function you produced above and start all five threads each thread should have different max_sleep time an example program to run the printer function five times via set of threads is given belowt thread(target=printerargs=(' ' ) thread(target=printerargs=(' ' ) thread(target=printerargs=(' ' ) thread(target=printerargs=(' ' ) thread(target=printerargs=(' ' ) start(