Python3并發(fā)寫(xiě)文件與Python對(duì)比
這篇文章主要介紹了Python3并發(fā)寫(xiě)文件原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
使用python2在進(jìn)行并發(fā)寫(xiě)的時(shí)候,發(fā)現(xiàn)文件會(huì)亂掉,就是某一行中間會(huì)插入其他行的內(nèi)容。
但是在使用python3進(jìn)行并發(fā)寫(xiě)的時(shí)候,無(wú)論是多進(jìn)程,還是多線程,都沒(méi)有出現(xiàn)這個(gè)問(wèn)題,難道是python3的特性嗎?
import time
import os
import multiprocessing
from multiprocessing.dummy import Pool as ThreadPool
def write(val, file):
w = open(file, "a")
for i in range(100):
w.write("%s\n" % val)
time.sleep(0.001)
def thread_write(file):
res, pools = [], ThreadPool(10)
for i in range(10):
val = str(i) * 1000
res.append(pools.apply_async(func=write, args=(val, file, )))
while res:
for ret in res:
if ret.ready():
res.remove(ret)
time.sleep(0.01)
def mutil_write(file):
pools = multiprocessing.Pool(processes=10)
res = []
for i in range(100):
res.append(pools.apply_async(thread_write, args=(file, )))
while res:
for ret in res:
if ret.ready():
res.remove(ret)
time.sleep(0.01)
if __name__ == '__main__':
file = "./write_test"
mutil_write(file)
with open(file) as fb:
lines = 0
line_len = []
for line in fb:
lines += 1
line = line.strip()
line_len.append(len(line))
if len(line) != 1000:
raise(Exception("error line: %s, len: %d" % (line, len(line))))
print("lines:%d, max len:%d, min:%d, avg:%.2f" % (lines, max(line_len), min(line_len), sum(line_len)/len(line_len)))
os.remove(file)
上面代碼,多進(jìn)程并發(fā)寫(xiě)結(jié)束后,校驗(yàn)每一行的長(zhǎng)度是否是設(shè)置好的長(zhǎng)度。用python3反復(fù)運(yùn)行,均通過(guò)測(cè)試沒(méi)有異常。
$ python3 --version Python 3.7.4 $ python3 t.py lines:10000, max len:1000, min:1000, avg:1000.00
如果用python2,則會(huì)出現(xiàn)異常:
$ python2 --version
Python 2.7.15
$ python2 t.py
Traceback (most recent call last):
File "t.py", line 49, in <module>
raise(Exception("error line: %s, len: %d" % (line, len(line))))
Exception: error line: 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, len: 1092
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python+redis通過(guò)限流保護(hù)高并發(fā)系統(tǒng)
- Python統(tǒng)計(jì)時(shí)間內(nèi)的并發(fā)數(shù)代碼實(shí)例
- python使用協(xié)程實(shí)現(xiàn)并發(fā)操作的方法詳解
- python如何使用socketserver模塊實(shí)現(xiàn)并發(fā)聊天
- selenium+python實(shí)現(xiàn)登陸QQ郵箱并發(fā)送郵件功能
- 使用Python paramiko模塊利用多線程實(shí)現(xiàn)ssh并發(fā)執(zhí)行操作
- Python aiohttp百萬(wàn)并發(fā)極限測(cè)試實(shí)例分析
- Python高并發(fā)解決方案實(shí)現(xiàn)過(guò)程詳解
相關(guān)文章
Python實(shí)現(xiàn)購(gòu)物車(chē)功能的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)購(gòu)物車(chē)功能的方法,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)購(gòu)物車(chē)功能的具體步驟、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2017-11-11
pytorch如何保存訓(xùn)練模型參數(shù)并實(shí)現(xiàn)繼續(xù)訓(xùn)練
這篇文章主要介紹了pytorch如何保存訓(xùn)練模型參數(shù)并實(shí)現(xiàn)繼續(xù)訓(xùn)練問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
python使用梯度下降算法實(shí)現(xiàn)一個(gè)多線性回歸
這篇文章主要為大家詳細(xì)介紹了python使用梯度下降算法實(shí)現(xiàn)一個(gè)多線性回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
python 循環(huán)遍歷字典元素的簡(jiǎn)單方法
下面小編就為大家?guī)?lái)一篇python循環(huán)遍歷字典元素的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
15行Python代碼實(shí)現(xiàn)免費(fèi)發(fā)送手機(jī)短信推送消息功能
這篇文章主要介紹了通過(guò)15行Python代碼實(shí)現(xiàn)免費(fèi)發(fā)送手機(jī)短信推送消息功能,通過(guò)實(shí)例代碼截圖的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
基于Python編寫(xiě)一個(gè)有趣的年會(huì)抽獎(jiǎng)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫(xiě)一個(gè)簡(jiǎn)易的抽獎(jiǎng)系統(tǒng),順便幫助大家鞏固一下對(duì)Python語(yǔ)法和框架的理解,感興趣的小伙伴可以了解下2023-12-12

