# This is a sample Python script. # Press Shift+F10 to execute it or replace it with your code. # Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings. import multiprocessing import subprocess import os from os import listdir from os.path import isfile, join import itertools import shutil numberOfOptimizedPatterns=0 manager = multiprocessing.Manager() q = manager.Queue() def listener(q): '''listens for messages on the q, writes to file. ''' with open("Results/OptimizationResults/results.csv", 'ab') as f: while 1: m = q.get() if m == 'kill': # f.write('killed') break f.write(m) f.flush() global numberOfOptimizedPatterns numberOfOptimizedPatterns=numberOfOptimizedPatterns+1 print("Optimized patterns:"+ str(numberOfOptimizedPatterns)) def optimize(fullPatternFilepath, reducedPatternFilepath): """Call run(), catch exceptions.""" dirname = os.path.abspath(os.path.dirname(__file__)) executableFilepath = os.path.join(dirname, 'ReducedModelOptimization') try: p = args = (executableFilepath, fullPatternFilepath, reducedPatternFilepath, "1500",'Results/OptimizationResults/') # print("Optimizing " + fullPatternFilepath + "@" + reducedPatternFilepath) popen = subprocess.Popen(args, stdout=subprocess.PIPE) popen.wait() output = popen.stdout.read() q.put(output) except Exception as e: print("error: %s run(*%r, **%r)" % (e, fullPatternFilepath,reducedPatternFilepath)) # Press the green button in the gutter to run the script. if __name__ == '__main__': fullPatternDirectory= "TestSet/FullPatterns" reducedPatternDirectory= "TestSet/ReducedPatterns" # Create results folder resultsDir = 'Results/OptimizationResults' if os.path.exists(resultsDir): shutil.rmtree(resultsDir) os.makedirs(resultsDir) # Write results fullPatternFilepaths=[join(fullPatternDirectory, fullPatternFilepath) for fullPatternFilepath in listdir(fullPatternDirectory) if isfile(join(fullPatternDirectory, fullPatternFilepath))] # print(fullPatternFilepaths) reducedPatternFilepaths=[join(reducedPatternDirectory,reducedPatternFilepath) for reducedPatternFilepath in listdir(reducedPatternDirectory) if isfile(join(reducedPatternDirectory, reducedPatternFilepath))] # print(reducedPatternFilepaths) #optimizationPairs=list(itertools.product(fullPatternFilepaths,reducedPatternFilepaths)) optimizationPairs=list(itertools.product(fullPatternFilepaths,['TestSet/ReducedPatterns/CW_reduced.ply'])) #print(optimizationPairs) pool=multiprocessing.Pool(23) watcher = pool.apply_async(listener, (q,)) pool.starmap(optimize,optimizationPairs) # f.close() q.put('kill') pool.close() pool.join() # # Or just: # args = "bin/bar -c somefile.xml -d text.txt -r aString -f anotherString".split() # See PyCharm help at https://www.jetbrains.com/help/pycharm/