Adding a Par construct to Python?
MRAB
google at mrabarnett.plus.com
Sun May 17 14:35:01 EDT 2009
Steven D'Aprano wrote:
> On Sun, 17 May 2009 17:19:15 +0100, MRAB wrote:
>
>>> But reduce()? I can't see how you can parallelize reduce(). By its
>>> nature, it has to run sequentially: it can't operate on the nth item
>>> until it is operated on the (n-1)th item.
>>>
>> It can calculate the items in parallel,
>
> I don't understand what calculation you are talking about. Let's take a
> simple example:
>
> reduce(operator.sub, [100, 50, 25, 5]) => 100-50-25-5 = 20
>
> What calculations do you expect to do in parallel?
>
>
>> but the final result must be
>> calculated sequence, although if the final operation is commutative then
>> some of them could be done in parallel.
>
> But reduce() can't tell whether the function being applied is commutative
> or not. I suppose it could special-case a handful of special cases (e.g.
> operator.add for int arguments -- but not floats!) or take a caller-
> supplied argument that tells it whether the function is commutative or
> not. But in general, you can't assume the function being applied is
> commutative or associative, so unless you're willing to accept undefined
> behaviour, I don't see any practical way of parallelizing reduce().
>
I meant associative not commutative.
I was thinking about calculating the sum of a list of expressions, where
the expressions could be calculated in parallel.
More information about the Python-list
mailing list