多处理列表中的多个文件

时间:2014-05-21 21:33:27

标签: python multithreading list csv multiprocess

我正在尝试同步读取包含存储在列表中的N个.csv文件的列表。

现在我执行以下操作:

导入多进程

  1. 清单
  2. 使用listdir of .csv
  3. 附加列表
  4. def A() - 偶数文件(list [:: 2])
  5. def B() - 奇数文件(list [1 :: 2]
  6. 流程1 def A()
  7. 流程2 def B()

    def read_all_lead_files(folder):
    
        for files in glob.glob(folder+"*.csv"):
            file_list.append(files)
            def read_even():
               file_list[::2]    
            def read_odd():
               file_list[1::2]  
    
         p1 = Process(target=read_even)
         p1.start()
         p2 = Process(target=read_odd)
         p2.start()
    
  8. 是否有更快的方法将列表分区拆分为Process函数?

1 个答案:

答案 0 :(得分:5)

我在这里按你的要求猜测,因为最初的问题还不清楚。由于os.listdir并不保证订购,因此我假设你的" 2"函数实际上是相同的,您只需要同时对多个文件执行相同的过程。

根据我的经验,最简单的方法是启动Pool,为每个文件启动一个进程,然后等待。 e.g。

import multiprocessing

def process(file):
    pass # do stuff to a file

p = multiprocessing.Pool()
for f in glob.glob(folder+"*.csv"):
    # launch a process for each file (ish).
    # The result will be approximately one process per CPU core available.
    p.apply_async(process, [f]) 

p.close()
p.join() # Wait for all child processes to close.