Python3并發(fā)寫文件與Python對比
這篇文章主要介紹了Python3并發(fā)寫文件原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
使用python2在進(jìn)行并發(fā)寫的時候,發(fā)現(xiàn)文件會亂掉,就是某一行中間會插入其他行的內(nèi)容。
但是在使用python3進(jìn)行并發(fā)寫的時候,無論是多進(jìn)程,還是多線程,都沒有出現(xià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ā)寫結(jié)束后,校驗每一行的長度是否是設(shè)置好的長度。用python3反復(fù)運行,均通過測試沒有異常。
$ python3 --version Python 3.7.4 $ python3 t.py lines:10000, max len:1000, min:1000, avg:1000.00
如果用python2,則會出現(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
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python+redis通過限流保護(hù)高并發(fā)系統(tǒng)
- Python統(tǒng)計時間內(nèi)的并發(fā)數(shù)代碼實例
- python使用協(xié)程實現(xiàn)并發(fā)操作的方法詳解
- python如何使用socketserver模塊實現(xiàn)并發(fā)聊天
- selenium+python實現(xiàn)登陸QQ郵箱并發(fā)送郵件功能
- 使用Python paramiko模塊利用多線程實現(xiàn)ssh并發(fā)執(zhí)行操作
- Python aiohttp百萬并發(fā)極限測試實例分析
- Python高并發(fā)解決方案實現(xiàn)過程詳解
相關(guān)文章
pytorch如何保存訓(xùn)練模型參數(shù)并實現(xiàn)繼續(xù)訓(xùn)練
這篇文章主要介紹了pytorch如何保存訓(xùn)練模型參數(shù)并實現(xiàn)繼續(xù)訓(xùn)練問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
15行Python代碼實現(xiàn)免費發(fā)送手機(jī)短信推送消息功能
這篇文章主要介紹了通過15行Python代碼實現(xiàn)免費發(fā)送手機(jī)短信推送消息功能,通過實例代碼截圖的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02

