簡體   English   中英

線程會提高這個循環的速度嗎?

[英]Will threading improve the speed of this loop?

我循環瀏覽一堆 pickle 文件,進行一些計算和排序,然后將 pickle 保存到同一個文件中。 每次迭代大約需要 15 毫秒,總共需要 180 次迭代。 如果我嘗試線程化而不是循環遍歷它,是否意味着整個過程在 15 毫秒內完成?

這是代碼:

import pandas as pd
import os

files = os.listdir('folder')

for f in files:
   df = pd.read_pickle('folder/'+f)
   df = df.sort_values(by='time')
   df = df.iloc[-100:,:]
   df.to_pickle('folder/'+f)

現在,在你說嘗試並測試速度之前——我不知道如何進行線程化,這需要我一些時間來學習,所以我想我只是問問。 我正在使用帶有 intl i3-8109U 的台式電腦,我認為它有 4 個處理器? 不確定這是否重要。

以下是使用多處理執行此操作的方法。 如果您想嘗試多線程,只需導入 ThreadPoolExecutor 並使用它代替 ProcessPoolExecutor。 不需要更改其他代碼。

import pandas as pd
from concurrent.futures import ProcessPoolExecutor
from glob import glob
import time

def do_work(file):
   df = pd.read_pickle(file)
   df = df.sort_values(by='time')
   df = df.iloc[-100:,:]
   df.to_pickle(file)

def main():
    start_time = time.perf_counter()
    with ProcessPoolExecutor() as executor:
        executor.map(do_work, glob('folder/*'))
    end_time = time.perf_counter()
    print(f'Duration={end_time-start_time:2f} seconds')

if __name__ == '__main__':
    main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM