Я экспериментирую с многопроцессорностью python. Я боролся с ошибкой в своем коде и сумел сузить ее. Тем не менее, я до сих пор не знаю, почему это происходит. То, что я публикую, - всего лишь образец кода. Если я импортирую модуль tempfile и изменяю tempdir, код падает при создании пула. Я использую Python 2.7.5python tempfile и ошибка многопроцессорного пула
Вот код
from multiprocessing import Pool
import tempfile
tempfile.tempdir = "R:/" #REMOVING THIS LINE FIXES THE ERROR
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
result = pool.apply_async(f, [10]) # evaluate "f(10)" asynchronously
print result.get(timeout=1) # prints "100" unless your computer is *very* slow
print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"
Вот ошибка
R:\>mp_pool_test.py
Traceback (most recent call last):
File "R:\mp_pool_test.py", line 11, in <module>
pool = Pool(processes=4) # start 4 worker processes
File "C:\Python27\lib\multiprocessing\__init__.py", line 232, in Pool
return Pool(processes, initializer, initargs, maxtasksperchild)
File "C:\Python27\lib\multiprocessing\pool.py", line 138, in __init__
self._setup_queues()
File "C:\Python27\lib\multiprocessing\pool.py", line 233, in _setup_queues
self._inqueue = SimpleQueue()
File "C:\Python27\lib\multiprocessing\queues.py", line 351, in __init__
self._reader, self._writer = Pipe(duplex=False)
File "C:\Python27\lib\multiprocessing\__init__.py", line 107, in Pipe
return Pipe(duplex)
File "C:\Python27\lib\multiprocessing\connection.py", line 223, in Pipe
1, obsize, ibsize, win32.NMPWAIT_WAIT_FOREVER, win32.NULL
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect
Этот код работает отлично.
from multiprocessing import Pool
import tempfile as TF
TF.tempdir = "R:/"
def f(x):
return x*x
if __name__ == '__main__':
print("test")
Странная вещь в том, что оба раза я ничего с TF.tempdir не делать, но один с Бассейн не работает по какой-то причине.
Почему вы используете временный файл? Почему вы передаете R:/как строку для каталога? – PyNEwbie
Перед установкой 'tempfile.tempdir' напечатайте его, чтобы вы могли видеть пример допустимой записи в Windows. Вероятно, вам понадобится «r» R: \ "'. –
Я так и думал, но следил за его созданием в моем интерпретаторе, и он работал нормально, я все время забываю о том, что окна позволяют использовать/в пути. Если вы перейдете к приглашению cmd и введите cd c: /, то в интерпретаторе он изменится на c: \, если вы используете os.chdir ('E: /'), cwd будет e: \\ по сути если вы используете/в подсказке cmd, вам не нужно указывать путь wihen есть пробелы, он не будет автозаполнен, хотя – PyNEwbie