我正在遍歷一堆泡菜檔案,進行一些計算和排序,然后將泡菜保存到同一個檔案中。每次迭代大約需要 15ms,總共 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 個處理器?不確定這是否重要。
uj5u.com熱心網友回復:
這是使用多處理執行此操作的方法。如果你想嘗試多執行緒,只需匯入 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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/430558.html
