在 python 中使用多处理转换多个文件



我在这个网站上寻找答案,但没有找到。我的问题是我想在 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()

相关内容

  • 没有找到相关文章

最新更新