Найти - Пользователи
Полная версия: subprocess вылетает с ошибкой WindowsError: [Error 5]
Начало » Python для новичков » subprocess вылетает с ошибкой WindowsError: [Error 5]
1
kt368
Здравствуйте!
Написал скрипт, который в двух процессах анализирует архивы с текстовыми файлами, результаты вносит в MySQL. Вот вкратце как он работает:

Я с помощью
queue = JoinableQueue()
и
queue.put(file_name)
формирую набор заданий, в конце добавляю в этот набор два “None” (передаю в общий для двух процессов список заданий имена файлов, которые нужно обработать). В каждом процессе эти имена извлекаются с помощью
input_filename = queue.get()
файлы обрабатываются ( после обработки каждого файла выполняется queue.task_done() ) аж пока
input_filename != None
В конце процесса я ещё раз выполняю
queue.task_done()
для указания, что процесс можно закрывать, он все что нужно рассчитал.
Да, в основном процессе в это время я нахожусь в ожидании завершения обработки подпроцессами набора заданий, т.е. нахожусь на команде
queue.join()
Короче, к чему это я. Все отлично работает уже несколько часов, пока в один прекрасный момент возьмет и вылетет:

Traceback (most recent call last):
File “D:\Install\Programming\eclipse\plugins\org.python.pydev_2.7.1.2012100913\pysrc\pydevd.py”, line 1397, in <module>
debugger.run(setup, None, None)
File “D:\Install\Programming\eclipse\plugins\org.python.pydev_2.7.1.2012100913\pysrc\pydevd.py”, line 1090, in run
pydev_imports.execfile(file, globals, locals) #execute the script
File “D:\Documents\My\Programming\Eclipse workspace\python_file_processing\main_module.py”, line 108, in <module>
workers.terminate()
File “C:\Python27\lib\multiprocessing\process.py”, line 137, in terminate
self._popen.terminate()
File “C:\Python27\lib\multiprocessing\forking.py”, line 306, in terminate
_subprocess.TerminateProcess(int(self._handle), TERMINATE)
WindowsError:

Какова фига - хз. Как это исследовать?

108-я строчка main_module.py вот (она крутится в цикле, j=0 или 1:
workers[j].terminate()
Тут я завершаю каждый из двух процессов - они у меня являются элементами списка workers.
JOHN_16
Error 5 указывает на права доступа. Пробуйте запускать от имени Администратора из командной строки
kt368
Все, решил проблему. Я в программе насильно пытался закрыть (terminate) процесс, а он сам вообще-то должен закрываться (правильно, да?). Вот в тех случаях когда процесс успел сам закрыться - и вылазила ошибка, мол, нечего терминейтить. Это как раз начало происходить когда я ввел пару операций перед командой TerminateProcess().
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB