【问题标题】:How to implement Multiprocessing in Azure Databricks - Python如何在 Azure Databricks 中实现多处理 - Python
【发布时间】:2022-07-04 21:13:05
【问题描述】:

我需要从目录中获取每个文件的详细信息。它需要更长的时间。我需要实现 Multiprocessing 以便它的执行可以提前完成。

我的代码是这样的:

from pathlib import Path
from os.path import getmtime, getsize
from multiprocessing import Pool, Process

def iterate_directories(root_dir):
  
  for child in Path(root_dir).iterdir():
    
    if child.is_file():
        modified_time = datetime.fromtimestamp(getmtime(file)).date()
        file_size = getsize(file)
         # further steps...
      
    else:
      iterate_directories(child) ## I need this to run on separate Process (in Parallel)
    

我尝试使用下面的方法进行递归调用,但它不起作用。它立即退出循环。

else:
    p = Process(target=iterate_directories, args=(child))
    Pros.append(p) # declared Pros as empty list.
    p.start()

for p in Pros:
  if not p.is_alive():
     p.join()

我在这里缺少什么?如何并行运行子目录。

【问题讨论】:

    标签: python-3.x python-asyncio python-multiprocessing python-multithreading azure-databricks


    【解决方案1】:

    你必须先获取目录列表,然后你必须使用多处理池来调用函数。

    如下所示。

    从路径库导入路径 从 os.path 导入 getmtime,getsize 从多处理导入池,进程 文件详细信息 = ''

    定义迭代目录(root_dir):

    对于路径中的孩子(root_dir).iterdir():

    if child.is_file():
        modified_time = datetime.fromtimestamp(getmtime(file)).date()
        file_size = getsize(file)
         Filedetails = Filedetails + '\n' + '{add file name details}' + modified_time + file_size
    

    其他: iterate_directories(child) ## 我需要它在单独的进程上运行(并行)

    return Filesdetails #file 从特定目录返回

    pool = multiprocessing.Pool(processes={定义你希望并行运行多少进程}) 结果 = pool.map(iterate_directories, {显式目录列表}) print(results) #整个集合将在这里打印。它基本上是一个列表,您可以迭代单个目录级别。

    请告诉我,进展如何。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多