【问题标题】:How to create a process for each directory?如何为每个目录创建一个进程?
【发布时间】:2012-10-02 00:25:50
【问题描述】:

我很难为当前目录中的每个文件夹创建 子进程 以在它们上执行某些功能(Python 2.7)。

我的想法是:

  • 首先用os.listdir(path)获取所有文件夹,用os.path.isdir(file_path)过滤文件。
  • 计算文件夹数并计算需要多少个 fork例如: 5 个文件夹我需要 3 个 fork(2³ - 1 = 7 个子进程)李>
  • 遍历所需的分叉数量,并在每次迭代中执行文件夹的代码,一次两个,从包含所有文件夹路径的列表中获取它们的路径。

    for counter in needed_forks:
       folder_pid = os.fork()
       if pid:
          some_function(folder_list[counter])
       else:
          some_function(folder_list[counter+1])
    

我无法获得任何好的输出,我认为主要是因为 folder_list 的一个索引在每次迭代中重复。 任何帮助都非常感谢,我正在急于完成这项任务,试图同时学习多处理和 Python。

谢谢。

【问题讨论】:

  • 你不需要counter*2counter*2+1吗?

标签: python process directory fork


【解决方案1】:

为什么不让一个进程继续分叉?那么您就不必尝试计算要使用的分叉数:

for d in directories:
    if os.fork():
        # parent
        continue
    else:
        # child
        # handle d...
        break # don't keep going

当然,我会质疑使用fork 以这种方式处理目录的智慧......

【讨论】:

  • 为了时间的缘故,我做了一些小的修改(os._exit(0) 而不是continue)。我想这只是一种习惯于分叉进程然后通过管道传递数据的练习。谢谢!
  • 嗯,你应该使用exit(0) 而不是os._exit,因为后者非常突然。但除此之外,很高兴听到!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2015-08-29
相关资源
最近更新 更多