最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python頻繁寫入文件時提速的方法

 更新時間:2019年06月26日 15:04:16   作者:尚  
在本篇內容里小編給大家整理了關于python頻繁寫入文件時提速的方法以及相關代碼,需要的朋友們學習下。

問題背景:有一批需要處理的文件,對于每一個文件,都需要調用同一個函數(shù)進行處理,相當耗時。

有沒有加速的辦法呢?當然有啦,比如說你將這些文件分成若干批,每一個批次都調用自己寫的python腳本進行處理,這樣同時運行若干個python程序也可以進行加速。

有沒有更簡單的方法呢?比如說,我一個運行的一個程序里面,同時分為多個線程,然后進行處理?

大概思路:將這些個文件路徑的list,分成若干個,至于分成多少,要看自己cpu核心有多少,比如你的cpu有32核的,理論上就可以加速32倍。

代碼如下:

# -*-coding:utf-8-*-

import numpy as np

from glob import glob

import math

import os

import torch

from tqdm import tqdm

import multiprocessing

label_path = '/home/ying/data/shiyongjie/distortion_datasets/new_distortion_dataset/train/label.txt'

file_path = '/home/ying/data/shiyongjie/distortion_datasets/new_distortion_dataset/train/distortion_image'

save_path = '/home/ying/data/shiyongjie/distortion_datasets/new_distortion_dataset/train/flow_field'

r_d_max = 128

image_index = 0

txt_file = open(label_path)

file_list = txt_file.readlines()

txt_file.close()

file_label = {}

for i in file_list:

  i = i.split()

  file_label[i[0]] = i[1]

r_d_max = 128

eps = 1e-32

H = 256

W = 256

def generate_flow_field(image_list):

  for image_file_path in ((image_list)):

    pixel_flow = np.zeros(shape=tuple([256, 256, 2])) # 按照pytorch中的grid來寫

    image_file_name = os.path.basename(image_file_path)

    # print(image_file_name)

    k = float(file_label[image_file_name])*(-1)*1e-7

    # print(k)

    r_u_max = r_d_max/(1+k*r_d_max**2) # 計算出畸變校正之后的對角線的理論長度

    scale = r_u_max/128 # 將這個長度壓縮到256的尺寸,會有一個scale,實際上這里寫128*sqrt(2)可能會更加直觀

    for i_u in range(256):

      for j_u in range(256):

        x_u = float(i_u - 128)

        y_u = float(128 - j_u)

        theta = math.atan2(y_u, x_u)

        r = math.sqrt(x_u ** 2 + y_u ** 2)

        r = r * scale # 實際上得到的r,即沒有resize到256×256的圖像尺寸size,并且?guī)牍街?

        r_d = (1.0 - math.sqrt(1 - 4.0 * k * r ** 2)) / (2 * k * r + eps) # 對應在原圖(畸變圖)中的r

        x_d = int(round(r_d * math.cos(theta)))

        y_d = int(round(r_d * math.sin(theta)))

        i_d = int(x_d + W / 2.0)

        j_d = int(H / 2.0 - y_d)

        if i_d < W and i_d >= 0 and j_d < H and j_d >= 0: # 只有求的的畸變點在原圖中的時候才進行賦值

          value1 = (i_d - 128.0)/128.0

          value2 = (j_d - 128.0)/128.0

          pixel_flow[j_u, i_u, 0] = value1 # mesh中存儲的是對應的r的比值,在進行畸變校正的時候,給定一張這樣的圖,進行找像素即可

          pixel_flow[j_u, i_u, 1] = value2

# 保存成array格式

    saved_image_file_path = os.path.join(save_path, image_file_name.split('.')[0] + '.npy')

    pixel_flow = pixel_flow.astype('f2') # 將數(shù)據(jù)的格式轉換成float16類型, 節(jié)省空間

    # print(saved_image_file_path)

    # print(pixel_flow)

    np.save(saved_image_file_path, pixel_flow)

  return

if __name__ == '__main__':

  file_list = glob(file_path + '/*.JPEG')

  m = 32

  n = int(math.ceil(len(file_list) / float(m))) # 向上取整

  result = []

  pool = multiprocessing.Pool(processes=m) # 32進程

  for i in range(0, len(file_list), n):

    result.append(pool.apply_async(generate_flow_field, (file_list[i: i+n],)))

  pool.close()

  pool.join()

在上面的代碼中,函數(shù)

generate_flow_field(image_list)

需要傳入一個list,然后對于這個list進行操作,之后對操作的結果進行保存

所以,只需要將你需要處理的多個文件,切分成盡量等大小的list,然后再對每一個list,開一個線程進行處理即可

上面的主函數(shù):

if __name__ == '__main__':

  file_list = glob(file_path + '/*.JPEG') # 將文件夾下所有的JPEG文件列成一個list

  m = 32 # 假設CPU有32個核心

  n = int(math.ceil(len(file_list) / float(m))) # 每一個核心需要處理的list的數(shù)目

  result = []

  pool = multiprocessing.Pool(processes=m) # 開32線程的線程池

  for i in range(0, len(file_list), n):

    result.append(pool.apply_async(generate_flow_field, (file_list[i: i+n],))) # 對每一個list都用上面我們定義的函數(shù)進行處理

  pool.close() # 處理結束之后,關閉線程池

  pool.join()

主要是這樣的兩行代碼,一行是

pool = multiprocessing.Pool(processes=m) # 開32線程的線程池

用來開辟線程池

另外一行是

result.append(pool.apply_async(generate_flow_field, (file_list[i: i+n],))) # 對每一個list都用上面我們定義的函數(shù)進行處理

對于線程池,用apply_async()同時跑generate_flow_field這個函數(shù),傳入的參數(shù)是:file_list[i: i+n]

實際上apply_async()這個函數(shù)的作用是所有的線程同時跑,速度是比較快的。

擴展:

Python文件處理之文件寫入方式與寫緩存來提高速度和效率

Python的open的寫入方式有:

write(str):將str寫入文件

writelines(sequence of strings):寫多行到文件,參數(shù)為可迭代對象

f = open('blogCblog.txt', 'w') #首先先創(chuàng)建一個文件對象,打開方式為w
f.writelines('123456') #用readlines()方法寫入文件

運行上面結果之后,可以看到blogCblog.txt文件有123456內容,這里需要注意的是,mode為‘w'模式(寫模式),再來看下面代碼:

f = open('blogCblog.txt', 'w') #首先先創(chuàng)建一個文件對象,打開方式為w
f.writelines(123456) #用readlines()方法寫入文件

運行上面代碼之后會報一個TypeError,這是因為writelines傳入的參數(shù)并不是一個可迭代的對象。

以上就是關于python頻繁寫入文件怎么提速的相關知識點以及擴展內容,感謝大家的閱讀。

相關文章

  • python 函數(shù)內部修改外部變量的方法

    python 函數(shù)內部修改外部變量的方法

    今天小編就為大家分享一篇python 函數(shù)內部修改外部變量的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python獲取DLL和EXE文件版本號的方法

    Python獲取DLL和EXE文件版本號的方法

    這篇文章主要介紹了Python獲取DLL和EXE文件版本號的方法,實例分析了Python獲取系統(tǒng)文件信息的技巧,需要的朋友可以參考下
    2015-03-03
  • Python學習入門之區(qū)塊鏈詳解

    Python學習入門之區(qū)塊鏈詳解

    區(qū)塊鏈的基礎概念很簡單:一個分布式數(shù)據(jù)庫,存儲一個不斷加長的 list,list 中包含著許多有序的記錄。下面這篇文章主要給大家介紹了關于Python學習入門之區(qū)塊鏈的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面來一起看看吧。
    2017-07-07
  • 利用arcgis的python讀取要素的X,Y方法

    利用arcgis的python讀取要素的X,Y方法

    今天小編就為大家分享一篇利用arcgis的python讀取要素的X,Y方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 關于python中time和datetime的區(qū)別與用法

    關于python中time和datetime的區(qū)別與用法

    這篇文章主要介紹了關于python中time和datetime的區(qū)別與用法,Python中封裝了很多實用的函數(shù),那么關于時間的函數(shù)time和datetime有什么區(qū)別和作用,讓我們來看看吧
    2023-03-03
  • Keras load_model 導入錯誤的解決方式

    Keras load_model 導入錯誤的解決方式

    這篇文章主要介紹了Keras load_model 導入錯誤的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 使用python制作九九乘法表的四種方法小結

    使用python制作九九乘法表的四種方法小結

    九九乘法表是初學者學習編程的必要練手題目之一,因此各種語言都有對應的實現(xiàn)方式,而 Python 也不例外,在 Python 中,我們可以使用多種方式來生成一個簡單的九九乘法表,本文給大家總結了使用python制作九九乘法表的四種方法,需要的朋友可以參考下
    2024-03-03
  • Python+OpenCV實現(xiàn)表面缺陷檢測

    Python+OpenCV實現(xiàn)表面缺陷檢測

    對于現(xiàn)在很多工業(yè)檢測,特別是對一些精密的器件進行篩選,往往都是像素級別的,十分的精確。本文將利用OpenCV+Python實現(xiàn)表面缺陷檢測,感興趣的可以了解一下
    2022-08-08
  • Pandas中DataFrame.drop()函數(shù)的具體使用

    Pandas中DataFrame.drop()函數(shù)的具體使用

    DataFrame.drop是Pandas庫中一個非常實用的函數(shù),用于刪除 DataFrame中的行或列,本文就來介紹一下Pandas中DataFrame.drop()函數(shù)的具體使用,感興趣的可以了解一下
    2024-07-07
  • Python實現(xiàn)八大排序算法

    Python實現(xiàn)八大排序算法

    這篇文章主要介紹了Python實現(xiàn)八大排序算法,如何用Python實現(xiàn)八大排序算法,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論

嵊泗县| 乐陵市| 吉林市| 莱阳市| 阿克陶县| 泸溪县| 大埔县| 芜湖县| 沁源县| 惠安县| 松潘县| 成都市| 韶关市| 托克托县| 成都市| 乌鲁木齐县| 富平县| 会理县| 邵阳县| 浑源县| 永嘉县| 古浪县| 新化县| 永泰县| 宜州市| 新绛县| 鲁山县| 石阡县| 赞皇县| 竹溪县| 宝兴县| 大荔县| 平远县| 丹东市| 建阳市| 远安县| 杭锦后旗| 平果县| 金山区| 黑龙江省| 长沙市|