Reference Parallel Primitives#
These are reference implementations of basic parallel primitives. These are not actually parallel, but work the same way. They are good for testing.
- sage.parallel.reference.parallel_iter(f, inputs)[source]#
Reference parallel iterator implementation.
INPUT:
f
– a Python function that can be pickled using the pickle_function command.inputs
– a list of pickleable pairs (args, kwds), where args is a tuple and kwds is a dictionary.
OUTPUT:
iterator over 2-tuples
(inputs[i], f(inputs[i]))
, where the order may be completely random
EXAMPLES:
sage: def f(N,M=10): return N*M sage: inputs = [((2,3),{}), (tuple(), {'M':5,'N':3}), ((2,),{})] sage: set_random_seed(0) sage: for a, val in sage.parallel.reference.parallel_iter(f, inputs): ....: print((a, val)) (((2,), {}), 20) (((), {'M': 5, 'N': 3}), 15) (((2, 3), {}), 6) sage: for a, val in sage.parallel.reference.parallel_iter(f, inputs): ....: print((a, val)) (((), {'M': 5, 'N': 3}), 15) (((2,), {}), 20) (((2, 3), {}), 6)
>>> from sage.all import * >>> def f(N,M=Integer(10)): return N*M >>> inputs = [((Integer(2),Integer(3)),{}), (tuple(), {'M':Integer(5),'N':Integer(3)}), ((Integer(2),),{})] >>> set_random_seed(Integer(0)) >>> for a, val in sage.parallel.reference.parallel_iter(f, inputs): ... print((a, val)) (((2,), {}), 20) (((), {'M': 5, 'N': 3}), 15) (((2, 3), {}), 6) >>> for a, val in sage.parallel.reference.parallel_iter(f, inputs): ... print((a, val)) (((), {'M': 5, 'N': 3}), 15) (((2,), {}), 20) (((2, 3), {}), 6)