Python中执行并行写入的多处理

Python中执行并行写入的多处理,python,multiprocessing,Python,Multiprocessing,我正试图同时完成一项任务。这是一项基本任务,我只是尝试探索python中的多处理。我有35个文件,我正在尝试对这35个文件进行格式化,并将它们写入新文件。我已经编写了以下代码: import csv import json import os import multiprocessing as mp path = '<somepath>' total_csv_file_list = [] for filename in os.listdir(path+'csv_3'):

我正试图同时完成一项任务。这是一项基本任务,我只是尝试探索python中的多处理。我有35个文件,我正在尝试对这35个文件进行格式化,并将它们写入新文件。我已经编写了以下代码:

import csv
import json
import os 
import multiprocessing as mp

path = '<somepath>'

total_csv_file_list = []
for filename in os.listdir(path+'csv_3'):
    total_csv_file_list.append(os.path.join(path+'csv_3',filename))
print(total_csv_file_list)    

def run_sed (path):
    path_csv=str(path)+'csv_3'
    path_json=str(path)+'json'
    for filename in path:
#       print("sed '1s/^/[/;$!s/$/,/;$s/$/]/' "+ (filename)+'>'+(filename.split('.')[0]+'.json'))
        os.system("sed '1s/^/[/;$!s/$/,/;$s/$/]/' "+ (filename)+'>'+(filename.split('.')[0]+'.json'))

#run_sed(total_csv_file_list)
p = mp.Pool(processes=mp.cpu_count())
total_file_list = p.map(run_sed,total_csv_file_list)
p.close()
p.join()

非常感谢您的帮助。

如果
path
是一个字符串,那么
对于路径中的文件名:
将在字符串的每个字符上运行

请注意,您在此行中传递的文件名列表

p.map(run_sed,total_csv_file_list)
已被
map()
函数分隔为单个文件名,因此无需再次循环


具体操作:在
def run_sed(path):
去掉path:

中文件名的整行
,如果使用多线程也会更好,因为它更适合于I/O绑定的工作,这正是您在os.listdir(path):
?@aws\u学徒中对文件名使用的用例hereDid。它更适合于网络I/O,而不是磁盘I/O,因为磁盘I/O与传统的HDD不能很好地并行。@Mad物理学家:我认为这要看情况而定。在我96 GB的系统上,许多磁盘活动都可以缓存。@ThomasWeller。为了阅读,maybeHi Thomas你能不能更详细一点@ThomasWellerSo,你是说在我的函数中,我应该去掉循环。路径基本上是一个列表,包含要访问的文件列表processed@user5149390:
total\u csv\u file\u list
是一个列表,但
path
不再是一个列表。它是
total\u csv\u file\u列表中的项目之一。是。知道了。谢谢我删除了循环并修改了代码。一切顺利。再次感谢您的帮助@Thomas Weller将有可能检查代码处理了多少文件,我试图处理35个文件,只处理了28个文件。是否有可能捕获未处理的文件@Thomas Weller
p.map(run_sed,total_csv_file_list)