awips2/pythonPackages/scientific/Examples/BSP/example3.py
root 06a8b51d6d Initial revision of AWIPS2 11.9.0-7p5
Former-commit-id: 64fa9254b946eae7e61bbc3f513b7c3696c4f54f
2012-01-06 08:55:05 -06:00

42 lines
1.2 KiB
Python
Executable file

from Scientific.BSP import ParFunction, ParRootFunction, ParMessages, \
ParConstant, ParIterator, ParIndexIterator, \
numberOfProcessors
import operator, string
# The local and global input functions.
def input():
data = open('numbers').readlines()
numbers = map(string.atoi, map(string.strip, data))
chunk_size = (len(numbers)+numberOfProcessors-1)/numberOfProcessors
chunks = []
for i in range(numberOfProcessors):
chunks.append((i, numbers[i*chunk_size:(i+1)*chunk_size]))
return chunks
def empty():
return []
global_input = ParRootFunction(input, empty)
# The local and global computation functions.
def square(x):
return x*x
global_square = ParFunction(square)
# The local and global output functions.
def output(results):
file = open('results', 'a')
for value in results:
file.write(`value` + '\n')
file.close()
global_output = ParRootFunction(output)
# Read input data.
data = global_input()
# Distribute input data.
items = ParMessages(data).exchange()[0]
# Computation and output loop.
for item in ParIterator(items):
result = global_square(item)
collected_results = result.put(ParConstant([0]))
global_output(collected_results)