文章内容

2021/1/5 18:03:00,作 者: 黄兵

关于使用文件作为存储处理结果的一些思考

最近在使用python写程序,主要是将ASN的数据写入到数据库,数据非常的多,有45w行左右,截图如下:

读取之后,将结果保存到数据库,但是由于数据量太大,中间可能存在中断,所以需要将已经保存到记录放在另外一个文件。

每次读取的时候,检查当前记录是否在已处理文件里面,具体代码如下:

asn_file_path = os.path.join(os.getcwd(), 'files\\IPv4.csv')
init_redis = redis_config.ConnConfig().Conn_Redis()
if os.path.exists(asn_file_path):
with open(asn_file_path, 'r') as csv_file:
# 读取csv文件
csv_reader = csv.reader(csv_file)
# 读取第一行
next(csv_reader)
for row in csv_reader:
processed_data = self.read_processed_data()
if row in processed_data:
# csv文件当前行已经被处理过,继续循环
continue

逻辑应该是没有问题。

但是当多程序运行的时候,会出现问题。当多线程运行的时候,第一个线程读取之后,第二个线程读取,结果第一个线程还没有写入,第二个读取到同一列数据,导致数据重复。

通过记录处理完成的csv文件可以查证:

这些都是重复数据,说明在程序设计的时候存在问题。

出现这个问题的解决方案:

可以将这些数据保存到数据库,读取一条删除一条,或者是保存到Redis,同样也是读取一条删除一条。

我这里采用的是后面一种方式。

有任何好的建议,欢迎大家讨论。


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - 关于使用文件作为存储处理结果的一些思考

分享到:

发表评论

评论列表