Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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