Отладчик в Python зависает над собственными встроенными модулями - PullRequest
0 голосов
/ 20 февраля 2019

Я думаю, что этот вопрос решается здесь: Отладка Python Spyder зависает с циклическим импортом

Но я не совсем нашел решение.

Первый раз с использованием отладчика в Python.Я использую IDLE.В противном случае программа работает нормально, но при запуске через отладчик она зависает, и мне приходится убивать программу.Я понял, что проблема заключается в том, что я импортирую созданные мной скрипты, которые я использую в основном в качестве баз данных.Так что это что-то вроде этого.

from ownScript import array

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

Если я использую «over», он просто зависает, но если я «перешагнул» свой путь к ошибке, я получаю следующее:

Traceback (most recent call last):
  File "/Users/Adrian/Documents/testModuleCaller.py", line 5, in <module>
    import testModule
  File "<frozen importlib._bootstrap>", line 980, in _find_and_load
  File "<frozen importlib._bootstrap>", line 148, in __enter__
  File "<frozen importlib._bootstrap>", line 174, in _get_module_lock
  File "<frozen importlib._bootstrap>", line 59, in __init__
  File "<frozen importlib._bootstrap>", line 59, in __init__
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/bdb.py", line 88, in trace_dispatch
    return self.dispatch_line(frame)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/bdb.py", line 112, in dispatch_line
    self.user_line(frame)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/idlelib/debugger.py", line 24, in user_line
    self.gui.interaction(message, frame)
AttributeError: '_ModuleLock' object has no attribute 'name'

Я понимаю, что вызов скрипта и импорт модуляэто разные вещи.Я проверил другие модули, такие как re и sys, и попытался скопировать некоторый код, чтобы избежать ошибки, но безуспешно.Я также проверил importlib / _bootstrap.py, но не понял, что я могу сделать с _ModuleLock.

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

РЕДАКТИРОВАТЬ: Итак, я немного протестировал: укоротив базу данных (список, который я импортирую) все работало нормально.Итак, я проверил с оригинальным размером, и он не зависает, но это занимает много времени, так что это становится непрактичным.Например, когда вы пытаетесь напечатать очень длинные списки, а IDLE сильно замедляется.

В итоге:

  • отладчик не зависает, но он очень медленный при импорте длинных наборов данных
  • ошибка, которую я отправил, я фактически получаю от любого другогомодуль тоже, например "дата-время"

Есть ли решение для увеличения скорости?

1 Ответ

0 голосов
/ 20 февраля 2019

Я выяснил, что проблема заключается в размере импортируемых модулей

Решение очень простое: не используйте модули Python в качестве баз данных - по крайней мере, в больших наборах данных.,

Огромные наборы данных всегда будут PITA для работы (да, они загружаются / переносятся очень долго, и да, они легко съедают весь ваш оперативный памяти), но есть причина, по которой у нас есть подходящие системы баз данных (реляционные илинет) - и не только для хранения, реляционные базы данных также предназначены для обработки данных и обычно довольно оптимизированы.

Также, если вам приходится работать с огромными наборами данных, будьте готовы переосмыслить часть своего кода, чтобы он могиспользовать ленивые вычисления (генераторы / ленивые итераторы), распараллеливание (многопроцессорная обработка, отображение / уменьшение, ...), запоминание там, где это имеет смысл, и т. д.

...