2015-02-26 5 views
0

код здесь:питон - ImportError: не может импортировать имя пула

from multiprocessing import pool 
def worker(num): 
    print 'Worker:', num 
    return 

if __name__ == '__main__': 
    jobs = [] 
    for i in range(5): 
     p = multiprocessing.Process(target=worker, args=(i,)) 
     jobs.append(p) 
     p.start() 

Жаль, что я новичок в Python. При попытке импортировать пул я получаю следующую ошибку. Он говорит что-то не так с os.chdir (wdir), но я не могу понять, что. Любая помощь ?

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "C:\Users\z080302\Desktop\WinPython-32bit-2.7.6.3\python-2.7.6\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile 
execfile(filename, namespace) 
File "C:/Users/z080302/Desktop/Python_Projects/mp_test.py", line 18, in <module> 
p = multiprocessing.Process(target=worker, args=(i,)) 
NameError: name 'multiprocessing' is not defined 
+2

Вы написали свой собственный файл, называемый многопроцессорной обработкой? Возможно, он пытается импортировать это (у которого нет «пула» для импорта). – Holloway

+0

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

+0

Можете ли вы предоставить нам весь файл? Если он слишком большой, скопируйте его в pastebin и отправьте ссылку здесь –

ответ

2

Вот код:

from multiprocessing import pool 
def worker(num): 
    print 'Worker:', num 
    return 

if __name__ == '__main__': 
    jobs = [] 
    for i in range(5): 
     p = multiprocessing.Process(target=worker, args=(i,)) 
     jobs.append(p) 
     p.start() 

Вы должны импортировать модуль мультипроцессирование использовать multiprocessing.Process, вы только импортировали функция/класса бассейн с многопроцессорной, поэтому простое исправление будет:

import multiprocessing 
pool = multiprocessing.pool 
def worker(num): 
    print 'Worker:', num 
    return 

if __name__ == '__main__': 
    jobs = [] 
    for i in range(5): 
     p = multiprocessing.Process(target=worker, args=(i,)) 
     jobs.append(p) 
     p.start() 
+0

спасибо. Не могли бы вы указать мне где-нибудь, чтобы узнать, как работает многопроцессорная обработка? было бы очень полезно –

+1

Конечно: http://sebastianraschka.com/Articles/2014_multiprocessing_intro.html, http://pymotw.com/2/multiprocessing/basics.html –

+0

Отличный .. !! Спасибо, сэр..!! –

2

Вы импортируете только pool модуль из multiprocessing модуля. Так что ваш переводчик знает pool только и не multiprocessing

Чтобы решить эту проблему, необходимо импортировать multiprocessing и когда требуется pool в коде вы можете использовать его как multiprocessing.pool

multiprocessing 
    |-- __init__.py 
    |--Process 
    |--Pool 
    |--This_also 

Как показано выше , вы импортируете только pool, а python не знает, кто, черт возьми, эта многопроцессорность и Process и This_also. Обычно у нас есть __ init __.py файл в пакете python. Список в этом файле all = ['pool.py','Process.py',.......'This_also'] содержит все модули, содержащиеся в пакете. Поэтому import * будет импортировать все модули. Пройдите через https://docs.python.org/2/tutorial/modules.html#

Смежные вопросы