我正在尝试在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