开启多进程报错
python3.7win10
1.读写txt的一个函数,当不写errors时,开启不开多进程,可以完美运行:代码如下
with open('FG_temp2.txt',encoding='gbk') as f:
2.开启多进程后,报错如下
'gbk' codec can't decode byte 0xc5 in position 186: illegal multibyte sequence
3.开多进程,读的时候写上errors=“ignore”,有数据丢失。
疑问,为啥不开多进程可以完美读取数据?
开了多进程后,就有解析不过去的?
有谁遇到过类似的问题吗? if __name__ == '__main__':
start=time.time()# 开始时间
pa = Process(target=txtjoin3,args=(path_fg_a, 'A', save_fg_a_excel, save_fg_a_pkl,))
pa.start()
pa.join()
单独运行上边没问题
在开启一个另外一个路径下的就报错:函数里有一个numpy.reshape()的函数
开启多线程后,有的时候两个都报错,有的时候一个报错。
说reshape不成功,应该是数据有丢失。
cannot reshape array of size 4094 into shape (86,44)
=====>>>>>>>>A Line FG 电子表格合并完毕...
本帖最后由 hrp 于 2020-10-27 16:26 编辑
多线程多进程读写同一个文件对象时会有竞争问题,比如一个汉字两个字节,一个线程读取到了前一个字节,指针移动,另一个线程读取到了后一个字节,这两个线程分别以gbk去解码一个字节,解不出来的可能性非常大,就算碰巧解出来了,得到的也不是原先的汉字了。当然这都是猜测。 如果是读写同一个文件的话应该优先考虑多线程而不是多进程
1 很多操作系统规定一个只能被一个进程写 还要考虑竞争资源乱序的问题
2 读写文件是io密集型而不是cpu密集型 (前者是大部分时间在io就是传输数据 后者大部分时间在cpu计算)
如果非要用多进程,应该看看锁 回调函数之类的东西
回到你的问题来
我猜测是因为多进程的乱序写入 导致gbk解码失败
补充
什么是编码 解码 编码格式
编码 编码是信息从一种形式或格式转换为另一种形式 基本就是字符串转二进制
解码 则是编码反过来
常见编码格式
ascii 学过c就知道 设定了256个字符到数字的映射
gbk 在ascii的基础上加上了简体中文和繁体中文
utf8 包括了各种语言 hrp 发表于 2020-10-27 16:25
多线程多进程读写同一个文件对象时会有竞争问题,比如一个汉字两个字节,一个线程读取到了前一个字节,指针 ...
明天我再试试,有结果,继续跟帖。 是我在函数里边写的有bug了,我把读取的5个文件夹的数据都写到一个文档里,同时区写入的时候导致数据错乱,导致报错。
当不开启线程的时候,按照顺序执行没问题,开启线程的时候就报错了。
优化:
把每个文件夹的文件写到对应的文档里,就没有这个问题了。同时开启线程进行读写,速度加快了一半,还是挺爽的。
页:
[1]