def calculator(id, sliceSize, delta, output):
    output.put(processSlice(id, sliceSize, delta))
#! /usr/bin/env python3

#  Calculation of π using quadrature. This is an SPMD, Python with Cython extension realization using
#  OpenMPI under the mpi4py package that provides Python binding to MPI.
#
#  Copyright © 2010–2013 Russel Winder

from mpi4py import MPI
from numpy import array
from output import out
from time import time

from processSlice_cython_py3 import processSlice

if __name__ == '__main__':
    n = 1000000000
    delta = 1.0 / n
    startTime = time()
    comm = MPI.COMM_WORLD
    myId = comm.Get_rank()
    sliceSize = n // comm.Get_size()
    localSum = array([processSlice(myId, sliceSize, delta)])
    sum = array([0.0])
    comm.Reduce((localSum, MPI.DOUBLE), (sum, MPI.DOUBLE))
    if myId == 0:
        pi = 4.0 * delta * sum[0]
        elapseTime = time() - startTime
        out(__file__, pi, n, elapseTime)
def calculator(channel, id, sliceSize, delta):
    channel.write(processSlice(id, sliceSize, delta))
def calculator(id, sliceSize, delta, results):
    results.put(processSlice(id, sliceSize, delta))