求助: 多线程计算 excel 文件结果不稳定

大佬们,早上好😄

能否帮忙看看以下代码问题出在哪里?多线程运行的结果不稳定。

imagepng

代码有点长还嵌套了,需要点耐心看完,解释如下:

A2: 读取只有两列的表,拼接成字符串 "旧列名: 新列名,…" 的形式,用于后续 rename 的参数;

A3: 获取文件路径,其中的 replace 是替换符号,为了 Win 系统下的路径符号问题,替换后 Mac 和 Win 都能用;

A4: 也是拼接成字符串,只是把包含了函数,形式如下所示。因为用 xlsopen@r 流式打开之后,必须要 xlsclose,想着把不同 xlsopen 对象区分开来命名成 A,B,C,…,把不同的文件对象命名成 FNA,FNB,…, 把每一个 excel 对象解析后的结果命名成结果 A, 结果 B,…,目的是多线程运行的时候可以正确处理不同的对象(不知道对不对?)中间一大堆文字就是 A2 的 rename 列名。

imagepng

A5: 多线程解析字符串,用 @m、fork 也行;

后面的几个步骤是序表的字段对齐,就不解释了。

主要的问题是 A5 多线程运行后,结果行数飘忽,有时候是对的,有时候会少,刚打开 IDE,首次运行时结果行数经常会少,但再次运行后结果会正确,这是在 Mac 版集算器里的现象,如果在 WIN 桌面版集算器里运行该代码,结果没有一次是正确的。但不用多线程时,把 A5 中的 @m 去掉,代码会返回正确的行数。

所以恳请大佬们帮忙看看问题出在哪里?结果的形式符合预期,但行数飘忽不定。

这里用多线程处理 excel 文件是不是用错了(A4 和 A5),我自己觉得思路没问题,不同的线程处理不同的对象,且不同的对象都有不同的命名,都是有针对性的操作,不至于存在误杀。xlsclose 有没有被正确关闭?是不是一定要关闭 xlsopen 对象?

涉及的文件因为是实例且文件较大,我就不公开上传了,有测试需要时再传。