import os import concurrent.futures import subprocess import sys import re def generate_bargraph_counter(pcp_file, input_directory, kind, output_directory): #print ("PCP file :" + pcp_file) # Construct the corresponding PPCP file name ppcp_file = pcp_file.replace("_PCP_", "_PPCP_") ppcp_file_path = os.path.join(input_directory, ppcp_file) # Check if the corresponding PPCP file exists if os.path.isfile(ppcp_file_path): # Generate the delta file using gen_delta_csv.py subprocess.run([ 'python', 'response_time_grouped_counter.py', os.path.join(input_directory, pcp_file), ppcp_file_path, kind, output_directory ]) else: print ("File not found: " + ppcp_file_path + ".") def generate_all_bargraphs(input_directory='.', output_directory='.'): # List all PCP files pcp_files = [pcp_file for pcp_file in os.listdir(input_directory) if re.match(r'.*_PCP_.*\.xmlv3\.csv', pcp_file)] # Use ProcessPoolExecutor to parallelize subprocess execution with concurrent.futures.ProcessPoolExecutor() as executor: futures = {executor.submit(generate_bargraph_counter, pcp_file, input_directory, kind, output_directory): pcp_file for pcp_file in pcp_files for kind in ['best', 'worst', 'average', 'missed']} # Wait for all tasks to complete concurrent.futures.wait(futures) if __name__ == "__main__": if len(sys.argv) > 3: print("Usage: python script.py [ input_directory [ output_directory ] ]") sys.exit(1) input_directory = sys.argv[1] if len(sys.argv) > 1 else '.' output_directory = sys.argv[2] if len(sys.argv) > 2 else '.' # Create the output directory if it doesn't exist os.makedirs(output_directory, exist_ok=True) generate_all_bargraphs(input_directory, output_directory)