线程会提高这个循环的速度吗?

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()