the following shows another example of threaded programa server that handles each client request in separate threadand that uses locks to protect shared data ||exercises copy and modify the grepword- py program so that instead of the child processes printing their outputthe main program gathers the resultsand after all the child processes have finishedsorts and prints the results this only requires editing the main(function and changing three lines and adding three lines the exercise does require some thought and careand you will need to read the subprocess module' documentation solution is given in grepword-p_ans py write multithreaded program that reads the files listed on the command line (and the files in any directories listed on the command linerecursivelyfor any file that is an xml file ( it begins with the characters "<?xml")parse the file using an xml parser and produce list of the unique tags used by the file or an error message if parsing error occurs here is sample of the program' output from one particular run/data/dvds xml is an xml file that uses the following tagsdvd dvds /data/bad aix is an xml file that has the following errormismatched tagline column /data/incidents aix is an xml file that uses the following tagsairport incident incidents narrative the easiest way to write the program is to modify copy of the findduplicates- py programalthough you can of course write the program entirely from scratch small changes will need to be made to the worker class' __init__(and run(methodsand the process(method will need to be rewritten entirely (but needs only around twenty linesthe program' main(function will need several simplifications and so will one line of the print_results(function the usage message will also need to be modified to match the one shown hereusagexmlsummary py [options[pathoutputs summary of the xml files in pathpath defaults to options- --help show this help message and exit