python-client icon indicating copy to clipboard operation
python-client copied to clipboard

bblfsh.decode hangs with multiprocessing

Open vmarkovtsev opened this issue 5 years ago • 1 comments

The following code hangs:

import bblfsh

def decode(uast):
    return bblfsh.decode(uast).load()

uasts = [b"", b"", ...]  # protobuf bytes
pool = multiprocessing.Pool(multiprocessing.cpu_count())
pool.map(decode, uasts)

however this doesn't

def decode(uast):
    import bblfsh
    return bblfsh.decode(uast).load()

uasts = [b"", b"", ...]  # protobuf bytes
pool = multiprocessing.Pool(multiprocessing.cpu_count())
pool.map(decode, uasts)

The reason is likely because gRPC in Python infinitely sucks as always, and it manages to interfere with regular protobuf reading somehow. I wonder if there is a way to fix this.

We had to defer grpc loading in the past when we had similar problems.

vmarkovtsev avatar Jul 20 '19 11:07 vmarkovtsev

I think https://github.com/grpc/grpc/issues/16001 is likely to be relevant here. Specifically, this might explain why the deferred import appears to "help" in this case.

creachadair avatar Jul 20 '19 20:07 creachadair