【问题标题】:Converting several files with Multiprocessing in python在 python 中使用多处理转换多个文件
【发布时间】:2017-03-28 08:36:59
【问题描述】:

我已经在这个网站上寻找答案,但没有找到。我的问题是我想在 python 中将几个文件从一种格式转换为另一种格式。我想同时转换 4 个文件。我已经用多处理库中的 process 关键字制作了一个代码,它可以工作,但是它使用多个进程来逐个转换文件,这不是我想要的。我试图用这段代码同时转换它们:

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()

我的问题是代码运行了,但是函数convert没有执行,代码冻结在pool.join()这一行(我用这个技术获得了很多时间,因为转换很长,当我运行这段代码,转换是瞬时的并且不起作用。)

我在另一个文件中使用了上面定义的函数。我导入我的模块并调用函数。

有人有想法吗? 谢谢

【问题讨论】:

  • 您的代码缩进好像有问题,请检查一下好吗?
  • 您好!感谢您的回复。是的,当我在这个论坛上粘贴代码时,代码识别变坏了。我现在又设置了一个。

标签: python multiprocessing


【解决方案1】:

这是一个可行的解决方案,没有同时转换 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多