Python: скрипт работает, но через некоторое время, кажется, заходит в тупик - PullRequest
1 голос
/ 20 марта 2010

У меня есть следующий скрипт, который работает по большей части Ссылка на PasteBin Работа скрипта заключается в запуске ряда потоков, каждый из которых, в свою очередь, запускает подпроцесс с помощью Popen.Выходные данные каждого подпроцесса выглядят следующим образом:

1
2
3
.
.
.
n
Done

По сути подпроцесс переносит 10M записей из таблиц в одной базе данных в разные таблицы в другой БД с большим количеством массива данных / манипуляций между ними из-за различныхсхемы.Если в любой момент выполнения подпроцесса происходит сбой (неверные записи, дубликаты первичных ключей и т. Д.) Или он успешно завершается, он выдаст «Done \ n».Если больше нет записей для выбора для передачи, он выдаст «NO DATA \ n»

Моим намерением было создать мой скрипт «tableTransfer.py», который бы породил ряд этих процессов, прочитайте ихвывод и, в свою очередь, вывод информации, такой как количество выполненных обновлений, оставшееся время, прошедшее время и количество передач в секунду.

Я начал запускать процесс вчера вечером и проверил сегодня утром, чтобы убедиться, что он заблокирован,Подпроцессов не было, все еще есть записи, которые нужно обновить, и сценарий не завершился.Он просто сидел там, больше не выводил текущую информацию, потому что не выполнялись никакие подпроцессы для обновления полного числа, что контролирует обновления выходных данных.Это работает на OS X.

Я ищу три вещи:

  1. Я хотел бы избавиться от возможности возникновения этого тупика, поэтому мне не нужно проверятьна это так часто.Есть ли проблема с блокировкой?
  2. Я делаю это неправильно (переменная gThreading для управления циклом создания дополнительного потока ... и т. Д.) Буду признателен за некоторые предложения по улучшению моей общей методологии.
  3. Как мне справиться с выходом ctrl-c?Прямо сейчас мне нужно убить процесс, но предположить, что я смогу использовать сигнальный модуль или другой для перехвата сигнала и уничтожения потоков, верно?

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

1 Ответ

0 голосов
/ 21 марта 2010

В вашем скрипте есть несколько мест, куда вы возвращаетесь без снятия блокировок. Это может вызвать проблему - строки: 97 и 99 - вот где блоки try: finally: могут вам очень помочь, так как вы сможете убедиться, что релиз вызывается правильно.

...