Вопрос

Я попытался скопировать этот пример из лекции Джесси Ноллера о многопроцессорности (как рекомендовано в другом посте SO).[http://pycon.blip.tv/file/1947354?filename=Pycon-IntroductionToMultiprocessingInPython630.mp4 ]

Но по какой-то причине я получаю сообщение об ошибке, как будто оно игнорирует определения моих функций:Я нахожусь в Windows XP (win32) который, как я знаю, имеет ограничения в отношении многопроцессорной библиотеки в версии 2.6, которая требует, чтобы все было доступно для выбора

from multiprocessing import Process
import time

def sleeper(wait):
    print 'Sleeping for %d seconds' % (wait,)
    time.sleep(wait)
    print 'Sleeping complete'

def doIT():    
    p = Process(target=sleeper, args=(9,))
    p.start()
    time.sleep(5)
    p.join()

if __name__ == '__main__':
    doIT()

Выходной сигнал:

Evaluating mypikklez.py
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Python26\lib\multiprocessing\forking.py", line 342, in main
    self = load(from_parent)
  File "C:\Python26\lib\pickle.py", line 1370, in load
    return Unpickler(file).load()
  File "C:\Python26\lib\pickle.py", line 858, in load
    dispatch[key](self)
  File "C:\Python26\lib\pickle.py", line 1090, in load_global
    klass = self.find_class(module, name)
  File "C:\Python26\lib\pickle.py", line 1126, in find_class
    klass = getattr(mod, name)
AttributeError: 'module' object has no attribute 'sleeper'

Ошибка, вызывающая проблему, заключается в следующем :Ошибка атрибута:Объект 'module' не имеет атрибута 'sleeper'

Какой бы простой ни была функция, я не могу понять, в чем может быть задержка.

Это просто для самостоятельного изучения основных понятий.Я не пытаюсь предварительно оптимизировать какую-либо проблему реального мира.

Спасибо.

Это было полезно?

Решение

Из обратной трассировки видно, что вы запускаете код непосредственно в интерпретаторе python (REPL).

Не делай этого.Сохраните код в файле и вместо этого запустите его из файла с помощью команды:

python myfile.py

Это решит вашу проблему.


Как несвязанное примечание, эта строка неверна:

print 'Sleeping for ' + wait + ' seconds'

Это должно быть:

print 'Sleeping for %d seconds' % (wait,)

Потому что вы не можете объединить объекты string и int (python строго типизирован)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top