# fulisi_interview **Repository Path**: initmatrix/fulisi_interview ## Basic Information - **Project Name**: fulisi_interview - **Description**: 福里斯的面试题 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-04-30 - **Last Updated**: 2022-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 说明 ### 题目要求 1. 处理一个指定格式的文件,这个文件很大很大,一个线程跑得很时间 2. 需要更快速的处理这个文件,并写入到新的文件中 3. 对每一行的数据处理后,写入新文件的过程中顺序可以乱 ### 我的思路 1. 采用多进程的方式对文件进行处理 2. 对文件的切割需要满足特定的条件,具体如下 - 根据文件的字节数和需要切割的块的数目来计算每一个块的开始和结束,代码中用Block表示 - 切割过程中,不能把相同的一行切到两个不同的块里面,所以用readline函数处理一下 3. 把每个块都传入一个工作进程中进行处理 4. 定义两个队列,其中一个是存储结果数据的,一个是存储异常数据的。因为Queue的put和get都是原子操作,所以这里不要自己考虑加锁问题 5. 每个工作进程在对块中的数据进行处理后,结果写入queue队列,异常写入error queue队列 6. 定义一个消费者进程,这个进程只做一件事,就是从结果队列中不断的拿去数据,也就是处理文本后的数据,然后一行行的写入指定的文件result.txt中 7. 关于异常中断后的重启我没有写 > ps 一个很好的题目