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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。