2

我在尝试让我的并行处理在可以从命令行调用的函数中工作时遇到问题。该函数从网站下载数据,进行一些处理并将数据保存到磁盘,因此多处理似乎是一个明显的解决方案。但是,当我尝试运行该函数时,它会创建空闲的 python 进程并冻结,不确定我做错了什么。目前我正在使用 python 2.7 (64bit) 和 64bit windows 7 和 joblib 来执行任务。

这是重现问题的简化代码:

import os,numpy as np
from joblib import Parallel, delayed

def foo(stations,wdir,multiprocess):
    if multiprocess==False:
        for a in stations:
            writefoo(wdir,a)
    if multiprocess==True:
        Parallel(n_jobs=len(stations))(delayed(writefoo)(wdir,station) for station in stations)

def writefoo(wdir,station):
    os.makedirs(os.path.join(wdir,station[0]))
    np.save(os.path.join(wdir,station[0],station[0]),station[1])

def go(multiprocess):
    stations=[['ST1',np.random.rand(1,1000).flatten()],['ST2',
               np.random.rand(1,1000).flatten()],['ST3',np.random.rand(1,1000).flatten()]]
    wdir=os.getcwd()
    foo(stations,wdir,multiprocess)

现在,当我从 ipython 控制台键入 go(True) 时,创建了 3 个新的 python 进程,它们不使用任何 % cpu 和大约相同数量的内存 (16 mb),但不创建文件,只是坐下来直到我杀死它们。

当我运行 go(False) 时,该函数只需几毫秒即可运行并按预期运行,但按顺序而不是并行运行。我在这里做错了什么?注意:重要的是可以从命令行调用整个过程,而不是运行脚本本身,因为代码将在模块中使用。

4

0 回答 0