Skip to content

"spawn" method doesn't work on 2.7 (under Linux) #201

Closed
@pitrou

Description

@pitrou

The following simple script:

from billiard import get_context

ctx = get_context('spawn')


def f(x):
    return x*x

if __name__ == '__main__':
    with ctx.Pool(2) as p:
        print(p.map(f, list(range(10))))

fails with:

Traceback (most recent call last):
  File "d.py", line 11, in <module>
    with ctx.Pool(2) as p:
  File "/home/antoine/billiard/billiard/context.py", line 165, in Pool
    context=self.get_context())
  File "/home/antoine/billiard/billiard/pool.py", line 1008, in __init__
    self._create_worker_process(i)
  File "/home/antoine/billiard/billiard/pool.py", line 1117, in _create_worker_process
    w.start()
  File "/home/antoine/billiard/billiard/process.py", line 122, in start
    self._popen = self._Popen(self)
  File "/home/antoine/billiard/billiard/context.py", line 341, in _Popen
    return Popen(process_obj)
  File "/home/antoine/billiard/billiard/popen_spawn_posix.py", line 39, in __init__
    super(Popen, self).__init__(process_obj)
  File "/home/antoine/billiard/billiard/popen_fork.py", line 24, in __init__
    self._launch(process_obj)
  File "/home/antoine/billiard/billiard/popen_spawn_posix.py", line 56, in _launch
    reduction.dump(process_obj, fp)
  File "/home/antoine/billiard/billiard/reduction.py", line 99, in dump
    ForkingPickler(file, protocol).dump(obj)
  File "/home/antoine/miniconda3/envs/dask27/lib/python2.7/pickle.py", line 224, in dump
    self.save(obj)
  File "/home/antoine/miniconda3/envs/dask27/lib/python2.7/pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "/home/antoine/miniconda3/envs/dask27/lib/python2.7/pickle.py", line 401, in save_reduce
    save(args)
  File "/home/antoine/miniconda3/envs/dask27/lib/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/home/antoine/miniconda3/envs/dask27/lib/python2.7/pickle.py", line 568, in save_tuple
    save(element)
  File "/home/antoine/miniconda3/envs/dask27/lib/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/home/antoine/miniconda3/envs/dask27/lib/python2.7/pickle.py", line 754, in save_global
    (obj, module, name))
pickle.PicklingError: Can't pickle <class 'billiard.pool.Process'>: it's not found as billiard.pool.Process

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions