Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\WPython\python-3.7.2.amd64\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\WPython\python-3.7.2.amd64\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "C:/xlsx/xls_hypertreading.py", line 92, in create_white_list
self.progress["value"] = 0
File "C:\WPython\python-3.7.2.amd64\lib\site-packages\openpyxl\worksheet\worksheet.py", line 438, in iter_rows
max_row = max_row or self.max_row
File "C:\WPython\python-3.7.2.amd64\lib\site-packages\openpyxl\worksheet\worksheet.py", line 344, in max_row
rows = set(c[0] for c in self._cells)
File "C:\WPython\python-3.7.2.amd64\lib\site-packages\openpyxl\worksheet\worksheet.py", line 344, in <genexpr>
rows = set(c[0] for c in self._cells)
RuntimeError: dictionary changed size during iteration
有一个巨大的xlsx,它以混乱的方式包含很多行。标有颜色的单元格进入一个列表,没有颜色的单元格进入另一个列表,比第一个列表大得多。之后,我查看列表,列表中的一些索引进行数学计算。使用几千行的小 xlsx,一切都可以快速运行,无一例外。但是,一旦您选择大,tkinter 窗口就会冻结几分钟并引发异常。代码示例:


您正在不同线程中修改同一个字典
self.progress- 这是线程不安全的。您可以在此处阅读有关 Python 中的线程同步的信息...
在您的情况下,一次通过 Excel 文件收集所有必要的数据而不使用任何流会更有利可图: