Многопоточный скрипт на python молча умирает - как отлаживать - PullRequest
1 голос
/ 07 мая 2010

У меня есть скрипт на python, который создает и запускает 3 потока, а затем переходит в цикл KeyboardInterrupt-catching, чтобы отправить сигнал остановки потоков при нажатии ctrl + c.

Метод run потоков имеет верхний уровень try-кроме того, что регистрирует каждое исключение, а также код верхнего уровня, который создает потоки, оборачивается в try-кроме для регистрации каждого исключения.

Но сценарий просто умирает случайно, иногда через день, иногда через час, без каких-либо исключений.

Это сводит меня с ума, потому что у меня нет больше идей, как это отладить.

Есть идеи, ребята?

Edit: Когда Лупер предложил заглянуть в системный журнал, он действительно показал

python[27737]: segfault at 0 ip 0808e1d3 sp b662c5e0 error 4 in python2.5[8048000+fb000]

До сих пор не знаю, как идти отсюда.

Что касается кода, он ничего необычного не делает, некоторые операции разбора файлов и копирования между каталогами, а также вызов некоторых исполняемых файлов через os.system

1 Ответ

1 голос
/ 07 мая 2010

Segfault в python обычно вызывается ошибкой в ​​модуле, написанном на C. Интерпретатор ничего не может сделать.

Быстрый поиск показал, что распространенные проблемы, которые вызывают segfault: 1) плохиепамять (но вы должны увидеть больше segfaults - запустите memcheck с live CD, если вы подозреваете это), 2) поврежденная установка (попробуйте переустановить python и пакеты, перезагружать все) и 3) ошибки (дух).

Попробуйте сначала 1) или 2), затем, чтобы увидеть, где остановится процесс, можно использовать strace для записи всех системных вызовов.Это может дать вам другой ключ к пониманию того, что происходит (выходной файл может увеличиться):

strace -f python my_script.py > strace.out 2>&1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...