多处理池,在列表中的每个项目的不同目录中运行

时间:2014-12-16 12:19:37

标签: python multiprocessing

我在我的代码中使用了multiprocessing.Pool模块,我使用pool.map()函数并行运行列表中的项目,我想为列表中的每个项目创建一个单独的工作目录执行pool.map函数。列表项包含模型,它们将在模拟函数中进行模拟。目前我的代码看起来像这样

     items=['BouncingBall.mo','HelloWorld.mo']
     from multiprocessing import Pool
     from multiprocessing.dummy import Pool as ThreadPool                             
     pool = ThreadPool()
     pool.map(parallel,items)

     def simulate(lists):
         np='some directory path'
         os.chdir(np)
         model.simulate(lists)

模拟函数将模拟列表中的每个模型并生成结果文件,我想在不同目录中执行列表中的项目,我尝试使用os.chdir(),它创建了两个目录,但结果存储在两个模型的一个目录,如何在两个不同的目录中执行结果文件。是否可以为每个进程创建不同的目录并单独执行

1 个答案:

答案 0 :(得分:1)

这个电话:

os.chdir(np)

影响所有线程(和主线程),因为它们都属于相同的进程。

您应该使用完整路径打开写入的文件,而不是全局更改目录。

如果您使用的是实际流程,那么这不会发生,因为您在隐式fork来电之后会有不同的流程。

您的选择是:

  1. 连续这样做。
  2. 使用流程代替线程
  3. 提供将结果存储为参数的路径(如果可能)并使用它。
  4. 好像你必须选择1或2。