Python多处理池卡住了吗?

时间:2018-08-23 01:49:53

标签: python pandas multiprocessing python-multiprocessing

我正在尝试在Python中实现多重处理。在下面的代码中,我验证了在运行apply时calYield可以在我的数据帧上正确且及时地工作,所以这不是问题。我正在尝试将数据帧分成两半,然后将calYield并行应用于这两个两半。

print("multiprocessing")
def runYield(frame):
    return frame.apply(calYield, axis=1)
num = 2
pool = mp.Pool(processes=num)
loansSplit = []
for i in range(num):
    loansSplit.append(loans.iloc[i*len(loans)//num:(i+1)*len(loans)//num])
del loans
print("original loans frame deleted")
results = [pool.apply_async(runYield, args=(x,)) for x in loansSplit]
pool.close()
print("pool closed")
pool.join()
print("pool joined")

当我运行上面的代码时,我通过“ pool close”看到了上面的打印语句,但是从不打印“ pool join”。此外,calYield函数会打印出它正在处理的行的名称(上面的代码段中未显示),并且在运行上述代码时我看不到该输出。

我正在此页面上的“池”示例中工作: https://sebastianraschka.com/Articles/2014_multiprocessing.html#multi-threading-vs-multi-processing

编辑:看来我的计算机可能有问题。以下内容被卡住,无法打印[64, 216]

def cube(n):
    return n**3
num = 2
pool = mp.Pool(processes=num)
loansSplit = [4,6]
print(pool.map(cube, loansSplit))

这基本上是文档中的第一个示例: https://docs.python.org/2/library/multiprocessing.html#introduction

0 个答案:

没有答案