我在这个网站上寻找答案,但没有找到。我的问题是我想在 python 中将多个文件从一种格式转换为另一种格式。我想同时转换 4 个文件。我已经从多处理库中制作了一个带有进程关键字的代码,它可以工作,但它使用多个进程来逐个转换文件,这不是我想要的。我尝试使用以下代码同时转换它们:
def convert_all_files (directoryName):
directoryName = r'Here I set my directory name C:...'
files2=[]
pool=mp.Pool(4)
for path, dirs, files in os.walk(directoryName):
for f in files:
f1=f
path1=path
files2.append((path1,f1))
for j in range(0, len(files2)):
pool.apply_async(convert, (files2[j][0],files2[j][1]))
pool.close()
pool.join()
我的问题是代码运行,但函数转换没有执行,并且代码冻结在 pool.join(( 行(我使用这种技术来获得很多时间,因为转换很长,当我运行此代码时,转换是即时的并且不起作用。
我在另一个文件中使用上面定义的函数。我导入我的模块并调用该函数。
有人有想法吗?谢谢
这是一个有效的解决方案,没有同时进行 4 次转换的限制。
def convert_all_files(directoryName):
for folder, subs, files in os.walk(directoryName):
for filename in files:
p = Process(target=convert, args=(folder, filename))
p.start()
如果您需要限制,这里有一个解决方案,但我不确定这是最好的:
def convert_all_files(directoryName):
process_count = 0
for folder, subs, files in os.walk(directoryName):
for filename in files:
p = Process(target=convert, args=(folder, filename))
p.start()
# Maybe not the better way to handle it
process_count = process_count + 1
if process_count % 4 == 0:
p.join()