agronholm / pythonfutures

Backport of the concurrent.futures package to Python 2.6 and 2.7
Other
232 stars 51 forks source link

[Errno 32] Broken pipe When Mapping Too Many Values #47

Open srkunze opened 8 years ago

srkunze commented 8 years ago

First of all, thanks for that great backport. I am using it for the xfork package to support the 2.7 branch.

Unfortunately, there is something strange happening with this futures distribution which works perfectly fine with python3.4

from concurrent.futures import ProcessPoolExecutor

def calc(n):
    with ProcessPoolExecutor() as pool:
        results = pool.map(term, range(n))
        return sum(results)

def term(x):
    return x

print(calc(5000))
/usr/bin/python2.7 calc.py
12497500
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/queues.py", line 266, in _feed
    send(obj)
IOError: [Errno 32] Broken pipe
kadnan commented 7 years ago

Did you find solution?

srkunze commented 7 years ago

@kadnan Not yet. Run short of time for now. Could you find something out?

agronholm commented 7 years ago

Process pooling is pretty broken on Python 2.7. I should add something to the docs to strongly discourage its use.

agronholm commented 7 years ago

@srkunze Out of curiosity, would you mind testing on PyPy?

dalcinl commented 7 years ago

@srkunze See python/cpython@dc19c24832f, seems hard to workaround (depending on how much monkeypatchng @agronholm is wiling to accept).

agronholm commented 7 years ago

I can accept patches but first someone needs to explain what is going on and what must be done to fix this. I myself am short on time to delve into this.