python - 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()

Извините, я новичок в питоне. Я получаю следующую ошибку всякий раз, когда пытаюсь импортировать пул. Он говорит, что что-то не так с 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

person Kumar Gavade    schedule 26.02.2015    source источник
comment
Вы написали свой собственный файл с названием multiprocessing? Возможно, он пытается импортировать это (у которого нет pool для импорта).   -  person Holloway    schedule 26.02.2015
comment
Итак, я создал многопроцессорный файл, поэтому я думаю, что он выдавал ошибку. Я удалил этот файл сейчас. но теперь выдает ошибку имени... редактирование исходного вопроса   -  person Kumar Gavade    schedule 26.02.2015
comment
Можете ли вы предоставить нам весь файл? Если он слишком большой, скопируйте его в pastebin и дайте ссылку сюда.   -  person no_name    schedule 26.02.2015
comment
какой файл вы хотите, чтобы я поделился? Я просто запускаю небольшой код. ` из многопроцессорного пула импорта 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()`   -  person Kumar Gavade    schedule 26.02.2015
comment
Я нашел проблему, все, что вам нужно сделать, это добавить многопроцессорный импорт из пула многопроцессорного импорта.   -  person no_name    schedule 26.02.2015
comment
хорошо .. это работает сейчас. Спасибо!   -  person Kumar Gavade    schedule 26.02.2015


Ответы (4)


Вот ваш код:

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()

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

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()
person no_name    schedule 26.02.2015
comment
спасибо .. можете ли вы указать мне где-нибудь, чтобы узнать, как на самом деле работает многопроцессорность ?? было бы здорово помочь - person Kumar Gavade; 26.02.2015

Вы назвали свой скрипт «multiprocessing.py»? Сначала проверьте свой каталог или файл ... если да -> Python будет искать пул в вашем скрипте, которого, вероятно, там нет (переименуйте его, если он существует). Звучит забавно, но это происходит)

person ant_dev    schedule 15.11.2019
comment
multiprocessing — это библиотека Python. - person StupidWolf; 15.11.2019
comment
@StupidWolf, привет, Уолд, да, но если вы попытаетесь установить для своего сценария имя multiprocessing.py, он не должен работать, подождите минуту, я опубликую код. - person ant_dev; 15.11.2019
comment
из многопроцессорного импорта Время импорта пула COUNT = 50000000 def countdown(n): while n›0: n -= 1 if name == 'main': pool = Pool( процессы=2) start = time.time() r1 = pool.apply_async(обратный отсчет, [COUNT//2]) r2 = pool.apply_async(обратный отсчет, [COUNT//2]) pool.close() pool.join( ) end = time.time() print('Время в секундах -', end - start) и имя файла multiprocessing.py - person ant_dev; 15.11.2019
comment
да я понимаю, что может быть столкновение. Внимательно посмотрите на вопрос, OP делал только из пула многопроцессорного импорта ... поэтому он / она не импортировал многопроцессорность напрямую. Так что, скорее всего, вы бы решить это в первую очередь. - person StupidWolf; 15.11.2019
comment
@StupidWolf Правда???? - person ant_dev; 15.11.2019

Вы импортируете только 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#

person User007    schedule 26.02.2015

Если вы написали файл с именем multiprocessing.py, он сначала попытается импортировать его, что будет означать, что он не найдет в нем пул, когда вы сделаете «из многопроцессорного импорта пула».

многопроцессорность - это модуль, включенный в Python, и в нем есть пул, поэтому, если нет конфликтов, должно работать следующее: "из пула многопроцессорного импорта"

person zelei zhang    schedule 20.09.2018