Уведомления

Группа в Telegram: @pythonsu

#1 Март 3, 2013 18:09:32

kt368
От:
Зарегистрирован: 2012-01-08
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

subprocess вылетает с ошибкой WindowsError: [Error 5]

Здравствуйте!
Написал скрипт, который в двух процессах анализирует архивы с текстовыми файлами, результаты вносит в 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.



Отредактировано kt368 (Март 3, 2013 18:10:35)

Офлайн

#2 Март 3, 2013 23:42:30

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

subprocess вылетает с ошибкой WindowsError: [Error 5]

Error 5 указывает на права доступа. Пробуйте запускать от имени Администратора из командной строки



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Март 4, 2013 22:08:33

kt368
От:
Зарегистрирован: 2012-01-08
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

subprocess вылетает с ошибкой WindowsError: [Error 5]

Все, решил проблему. Я в программе насильно пытался закрыть (terminate) процесс, а он сам вообще-то должен закрываться (правильно, да?). Вот в тех случаях когда процесс успел сам закрыться - и вылазила ошибка, мол, нечего терминейтить. Это как раз начало происходить когда я ввел пару операций перед командой TerminateProcess().



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version