еще одна путаница с ошибкой многопроцессорной обработки, объект "модуль" не имеет атрибута "f"


Я знаю, что на это уже отвечали раньше, но кажется, что выполнение скрипта напрямую " python filename.py-не работает. У меня есть Python 2.6.2 на SUSE Linux.

код:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from multiprocessing import Pool
p = Pool(1)
def f(x):
    return x*x
p.map(f, [1, 2, 3])

Командная строка:

> python example.py
Process PoolWorker-1:
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/process.py", line 231, in _bootstrap
    self.run()
File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run
    self._target(*self._args, **self._kwargs)
File "/usr/lib/python2.6/multiprocessing/pool.py", line 57, in worker
    task = get()
File "/usr/lib/python2.6/multiprocessing/queues.py", line 339, in get
    return recv()
AttributeError: 'module' object has no attribute 'f'
4 57

4 ответа:

Реструктурируйте свой код так, чтобы f() функция определяется перед созданием экземпляра бассейн. В противном случае работник не может видеть вашу функцию.

#!/usr/bin/python
# -*- coding: utf-8 -*-

from multiprocessing import Pool

def f(x):
    return x*x

p = Pool(1)
p.map(f, [1, 2, 3])

работает:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == "__main__":
    p = Pool(1)
    p.map(f, [1, 2, 3])

Я не на 100% уверен, почему ваш код не работает, но я думаю, причина в том, что дочерние процессы запущены multiprocessing модуль попробуйте импортировать основной модуль (чтобы иметь доступ к методам, которые вы определили), и if __name__ == "__main__" stanza требуется не для выполнения кода инициализации, где вы настроили свой пул.

одна из возможностей заключается в том, что ваш файл python имеет то же имя, что и модуль:

  • test.py

проблема у меня была решена с помощью if __name__ == "__main__" Как указал Тамаш; в Eclipse для Windows примеры не работают под интерпретатором. Это объясняется в http://docs.python.org/2/library/multiprocessing