Python 中的调试器冻结了自己构建的模块

Debugger in Python freezes over own built modules

我认为这个问题在这里得到了解决:Python spyder debug freezes with circular importing

但我没有完全找到解决方案。

第一次在 Python 中使用调试器。我正在使用闲置。程序 运行 否则没问题,但是当 运行 通过调试器时它会冻结,我必须终止程序。我发现问题是我导入了我创建的脚本,这些脚本主要用作数据库。所以是这样的。

from ownScript import array

其中数组只是列表的列表,如 CSV 文件。 我发现这是一种在本地使用数据的非常直接的方式,即使我将来肯定会采用其他方式。

如果我使用 "over" 它只是冻结,但如果我 "step" 我的错误方式我得到这个:

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 做些什么。

据我所知,我要么修改我的 "module" 以完成与其他模块相同的工作,要么我找到另一种方法来处理我程序中的数据,或者我使用另一个解释器。

编辑: 所以我做了一些测试:通过缩短数据库(我正在导入的列表)一切正常。所以我用原来的尺寸测试了一下,虽然没有卡顿,但是耗费了很多时间,以至于变得不切实际。就像当您尝试打印很长的列表并且 IDLE 变慢很多时。

总结:

有什么提高速度的解决方案吗?

I figured out the problem is the size of the modules I import

解决方案非常简单:不要将 python 模块用作数据库 - 至少不要在大型​​数据集上使用。

庞大的数据集总是需要处理的 PITA(是的,它们需要很长时间才能加载/传输,是的,它们很容易耗尽你所有的内存),但我们拥有适当的数据库系统(关系型或非关系型)是有原因的) - 不仅用于存储,关系数据库也专为数据处理而设计,通常都经过了相当优化。

此外,如果您必须处理庞大的数据集,请准备好重新考虑您的一些代码,以便它可以使用惰性计算(生成器/惰性迭代器)、并行化(多处理、map/reduce、...) ,有意义的记忆等

追溯与https://bugs.python.org/issue33065. I believe both are due to a bug in a line of code in idlelib that does not appear in the tracebacks. I just applied a fix that will be in the next releases of 3.8, 3.9, and 3.10. The way to fix current releases in in 中的类似。如果问题依然存在,我想了解更多详情。