我认为这个问题在这里得到解决:Python spyder debug freezes with circular importing
但我没有得到解决方案。
第一次在Python中使用Debugger。我正在使用IDLE。该程序运行正常,但是当通过调试器运行它冻结,我必须杀死该程序。我发现,问题是我导入了我创建的脚本,我主要用作数据库。所以就是这样的。
from ownScript import array
其中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减速很多时。
综上所述:
任何增加速度的解决方案?
我发现问题是我导入的模块的大小
解决方案非常简单:不要将python模块用作数据库 - 至少不要用于庞大的数据集。
巨大的数据集将始终是一个PITA来处理(是的,它们需要很长时间来加载/转移,是的,它们很容易吃掉你所有的ram),但是我们有一个合理的数据库系统(关系或不关系)的原因 - 而且不仅仅是对于存储,关系数据库也是为数据处理而设计的,通常都是非常优化的。
此外,如果您必须处理大型数据集,请准备重新考虑您的一些代码,以便它可以使用延迟评估(生成器/延迟迭代器),并行化(多处理,映射/缩减,...),在有意义的情况下进行记忆,等等