From 86f281f5ab2c576fd39e5d42b2fe8db92f7fd441 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Sat, 2 Oct 2010 19:58:19 +0200 Subject: [PATCH] Parallelized move_variables in parsed_text Version:1.1.49 --- src/parsed_text.py | 7 +++---- src/preprocessed_text.py | 5 +++-- src/util.py | 26 ++++++++++++++------------ src/version.py | 2 +- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/parsed_text.py b/src/parsed_text.py index 42cc146..d1e569b 100644 --- a/src/parsed_text.py +++ b/src/parsed_text.py @@ -243,8 +243,7 @@ parsed_text = result ###################################################################### def move_variables(): - main_result = [] - for filename, text in parsed_text: + def func(filename, text): result = [] # 1st pass varlist = [] @@ -328,9 +327,9 @@ def move_variables(): assert old_varlist == [] varlist = [] result.append( (vars,line) ) + return result - main_result.append( (filename, result) ) - return main_result + return parallel_loop(func,parsed_text) parsed_text = move_variables() ###################################################################### diff --git a/src/preprocessed_text.py b/src/preprocessed_text.py index b1d9702..51816bd 100644 --- a/src/preprocessed_text.py +++ b/src/preprocessed_text.py @@ -548,7 +548,7 @@ def irp_simple_statements(text): i = line.i f = line.filename result = [ Begin_provider(i,line.text, (f,varname)), - Declaration(i," character*(%d) :: irp_here = '%s'"%(length,varname), line.filename) ] + Declaration(i," character*(%d) :: irp_here = '%s'"%(length,varname), f) ] if command_line.do_assert or command_line.do_debug: result += [ Simple_line(i," call irp_enter(irp_here)", f), @@ -829,7 +829,8 @@ def create_preprocessed_text(filename): return result ###################################################################### -preprocessed_text = parallel_loop( create_preprocessed_text, irpf90_files ) +preprocessed_text = parallel_loop( lambda x,y: create_preprocessed_text(x), \ + map(lambda x: (x,None), irpf90_files ) ) ###################################################################### def debug(): diff --git a/src/util.py b/src/util.py index c6db0c0..abb41e3 100644 --- a/src/util.py +++ b/src/util.py @@ -128,10 +128,10 @@ def put_info(text,filename): import cPickle as pickle import os, sys -def fork_and_pickle(f,filename): +def fork_and_pickle(f,filename,text): fork = os.fork() if fork == 0: - result = f(filename) + result = f(filename,text) file = open('%s.pickle'%filename,'w') pickle.dump(result,file,-1) file.close() @@ -139,22 +139,24 @@ def fork_and_pickle(f,filename): else: return fork -def parallel_loop(f,files): +def parallel_loop(f,source): pidlist = {} - for filename in files: - pidlist[filename] = fork_and_pickle( f, filename ) + for filename, text in source: + pidlist[filename] = fork_and_pickle( f, filename, text ) result = [] - for filename in files: - os.waitpid(pidlist[filename],0) - file = open('%s.pickle'%filename,'r') - data = pickle.load(file) - file.close() - os.remove('%s.pickle'%filename) - result.append( (filename, data) ) + for filename,text in source: + os.waitpid(pidlist[filename],0) + file = open('%s.pickle'%filename,'r') + data = pickle.load(file) + file.close() + os.remove('%s.pickle'%filename) + result.append( (filename, data) ) return result + + if __name__ == '__main__': print "10",dimsize("10") #-> "10" print "0:10",dimsize("0:10") # -> "11" diff --git a/src/version.py b/src/version.py index 8879ada..60c8797 100644 --- a/src/version.py +++ b/src/version.py @@ -1 +1 @@ -version = "1.1.48" +version = "1.1.49"