Отладка предполагаемых проблем с памятью в PythonPython

Программы на Python
Ответить
Anonymous
 Отладка предполагаемых проблем с памятью в Python

Сообщение Anonymous »

У меня есть скрипт Python, который обрабатывает значительный объем данных, используя значительный объем рекурсии, но не настолько, чтобы вызвать ошибку MemoryError или RecursionError. Завершится ли этот сценарий до завершения, зависит от того, как он выполняется, а также от некоторой кажущейся случайности.
  • Запуск через PyCharm: успешно. или останавливается с кодом выхода 0xC0000005, -2147483645 или исключением
  • Запуск через CLI: завершается успешно или останавливается с исключение или полностью автоматически
  • Запуск через CLI с трассировкой: занимает вечность (из-за всей трассировки), но завершается успешно
Все исключения, упомянутые выше, относятся к одному и тому же разнообразию: TypeError или AttributeError, дюжина или около того вызывает рекурсивную цепочку, которая не на самом деле случиться. Например,

Код: Выделить всё

TypeError: unsupported operand type(s) for |: 'function' and 'set'
где левый операнд никогда не является функцией и, в частности, не функцией в вызове-нарушителе, что подтверждено в отладчик.
Все это безумие указывает на неприятные ошибки памяти... где-то (

Код: Выделить всё

0xC0000005
, например, является нарушением прав доступа Windows). Python не является языком, который часто сталкивается с загадочными проблемами с памятью, если только нет очевидной низкоуровневой библиотеки, которая все портит (этот сценарий - чистый Python). Отладка практически невозможна, поскольку отладчик улавливает все упомянутые исключения, но не дает объяснений, как они возникли. И нет никакой неконтролируемой утечки памяти; скрипт работает (с трассировкой) прямо сейчас и занимает стабильное пространство 1,6 ГБ.
Я нашел другие ответы, указывающие на то, что PyCharm может быть виновником, и действительно его бегун находится на хотя бы частично ответственен за досрочное завершение, но даже CLI дает странные результаты (зачем ему вообще останавливаться молча?). И трассировка не поможет, так как с ней сценарий волшебным образом добивается успеха, как будто зоркий глаз пугает его и заставляет подчиняться.
Итак, все это для того, чтобы сказать, что я' Мне не обязательно нужна помощь с этим конкретным сценарием; нет нужды, чтобы кто-то еще копался в этом беспорядке. Вместо этого мне нужен совет по устранению таких ошибок, связанных с памятью, в Python и, если возможно, описание на какие потенциальные причины следует обращать внимание.
Поиск существующих ответов на этот вопрос оказался чрезвычайно трудным; Например, вопросы SO, касающиеся 0xC0000005, почти всегда имеют в качестве подозреваемой библиотеку типа PyTorch. Я попытался переработать свой сценарий и, думаю, сделал его более эффективным, но безрезультатно. Это такая специфическая и неприятная проблема, но я уверен, что я не единственный, кто с ней столкнулся. Будем очень признательны за любую информацию или места, где ее можно найти.

Подробнее здесь: https://stackoverflow.com/questions/779 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»