Python3并发写文件与Python对比
这篇文章主要介绍了Python3并发写文件原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
使用python2在进行并发写的时候,发现文件会乱掉,就是某一行中间会插入其他行的内容。
但是在使用python3进行并发写的时候,无论是多进程,还是多线程,都没有出现这个问题,难道是python3的特性吗?
importtime importos importmultiprocessing frommultiprocessing.dummyimportPoolasThreadPool defwrite(val,file): w=open(file,"a") foriinrange(100): w.write("%s\n"%val) time.sleep(0.001) defthread_write(file): res,pools=[],ThreadPool(10) foriinrange(10): val=str(i)*1000 res.append(pools.apply_async(func=write,args=(val,file,))) whileres: forretinres: ifret.ready(): res.remove(ret) time.sleep(0.01) defmutil_write(file): pools=multiprocessing.Pool(processes=10) res=[] foriinrange(100): res.append(pools.apply_async(thread_write,args=(file,))) whileres: forretinres: ifret.ready(): res.remove(ret) time.sleep(0.01) if__name__=='__main__': file="./write_test" mutil_write(file) withopen(file)asfb: lines=0 line_len=[] forlineinfb: lines+=1 line=line.strip() line_len.append(len(line)) iflen(line)!=1000: raise(Exception("errorline:%s,len:%d"%(line,len(line)))) print("lines:%d,maxlen:%d,min:%d,avg:%.2f"%(lines,max(line_len),min(line_len),sum(line_len)/len(line_len))) os.remove(file)
上面代码,多进程并发写结束后,校验每一行的长度是否是设置好的长度。用python3反复运行,均通过测试没有异常。
$python3--version Python3.7.4 $python3t.py lines:10000,maxlen:1000,min:1000,avg:1000.00
如果用python2,则会出现异常:
$python2--version Python2.7.15 $python2t.py Traceback(mostrecentcalllast): File"t.py",line49,inraise(Exception("errorline:%s,len:%d"%(line,len(line)))) Exception:errorline:333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,len:1092
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。