First, we need to solve a problem. In order to keep the focus on the various mechanisms for parallel processing, that domain of that problem needs to be easily understood. At the same time, it needs to allow for processing of arbitrarily large datasets, preferably with unpredictable runtimes per element in the dataset, and with results that are unpredictable. To that end, the problem we're going to solve is determining all of the factors of every number in some range of integer values. That is, for any given positive integer value, x, we want to be able to calculate and return a list of all the integer values that x is evenly divisible by. The function to calculate and return the list of factors for a single number (factors_of) is relatively simple:
def factors_of(number:(int)) -> (list): """ Returns a list of factors...