使用python并行处理文件夹中的多个文件

使用python并行处理文件夹中的多个文件,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我有一个包含100个excel文件的文件夹。从我的程序中,我必须处理所有的文件。我想使用多线程或使用python的多处理并行地实现这一点。我计划使用10个线程或进程,其中每个线程或进程将处理10个文件。同样,第一个线程/进程应该处理文件1-10,第二个线程/进程应该处理文件11-20。我尝试在python中使用多线程,但不确定如何对特定文件编制索引?任何建议都将受到欢迎进行多处理的最简单方法如下: files = [ ... list of file names generated someho

我有一个包含100个excel文件的文件夹。从我的程序中,我必须处理所有的文件。我想使用多线程或使用python的多处理并行地实现这一点。我计划使用10个线程或进程,其中每个线程或进程将处理10个文件。同样,第一个线程/进程应该处理文件1-10,第二个线程/进程应该处理文件11-20。我尝试在python中使用多线程,但不确定如何对特定文件编制索引?任何建议都将受到欢迎

进行多处理的最简单方法如下:

files = [ ... list of file names generated somehow ... ]

def process_file(file_name):
    .... process file named file_name however you want ...

with multiprocessing.Pool(10) as pool:
    pool.map(process_file, files, 10);

10表示需要10个线程。第二个10表示要将文件以10为一组发送到每个线程。现有的
map()
变体可以满足您的许多需求。

Python 3有一个内置库“线程”。以下是一个例子:

from threading import Thread
import time
import random

def slow_function(i):
    time.sleep(random.randint(1, 10))
    print(i)

def running_threads():
    threads = []
    for i in range(10):
        t = Thread(target=slow_function, args=(i,))
        threads.append(t)
        t.start()
    for t in threads:
        t.join()  # making sure that all your threads are done before doing something else with all results

running_threads()

您好,在这种情况下,我应该阅读所有文件夹内容,并将其保存在列表结构中。如果文件数量非常多,是否可以让每个进程或线程直接从文件夹中读取您没有提到如何获取文件名,或者您正在对其进行何种处理。所以我的答案必须非常笼统。pool.map的第二个参数可以是任何类型的列表、序列或迭代器。由您决定是“file”是文件名,process\u file读取它,还是“file”是已经读取的内容,process\u file只是提取数据。将
multiprocess.Pool
更改为
multiprocessing.Pool.ThreadPool
将为您提供线程池,而不是进程池。所有的设置和清理工作都由您负责。在我的例子中,我正在考虑读取文件夹中的所有文件并将其存储在列表结构中。pool.map确保第二个进程读取文件11到20?