【发布时间】:2019-08-03 15:46:10
【问题描述】:
似乎有一连串关于多处理库溢出的问题和答案。我已经浏览了所有我能找到的相关内容,但没有找到直接与我的问题相关的内容。
我正在尝试将相同的功能并行应用于多个文件。但是,每当我开始处理时,计算机只会启动几个 python 实例,然后什么也不做。根本没有计算发生,进程只是闲置
我已经查看了所有关于溢出的类似问题,但似乎没有一个有我的空闲进程问题。
我做错了什么?
定义函数(例如缩写。检查以确保它有效)
import pandas as pd
import numpy as np
import glob
import os
#from timeit import default_timer as timer
import talib
from multiprocessing import Process
def example_function(file):
df=pd.read_csv(file, header = 1)
stock_name = os.path.basename(file)[:-4]
macd, macdsignal, macdhist = talib.MACD(df.Close, fastperiod=12, slowperiod=26, signalperiod=9)
df['macd'] = macdhist*1000
print(f'stock{stock_name} processed')
final_macd_report.append(df)
获取我要运行该功能的目录中所有文件的列表
import glob
path = r'C:\Users\josiahh\Desktop\big_test3/*'
files = [f for f in glob.glob(path, recursive=True)]
尝试多处理
import multiprocessing as mp
if __name__ == '__main__':
p = mp.Pool(processes = 5)
async_result = p.map_async(example_function, files)
p.close()
p.join()
print("Complete")
任何帮助将不胜感激。
【问题讨论】:
-
除了
filepath没有在exemple_function中定义之外,它看起来基本没问题。在第一个代码块中,您要导入Process。从全局路径来看,您似乎正在运行 ms-windows。确保您在__main__之外启动进程。 -
@RolandSmith,感谢您对该功能的了解。那是我为示例缩小代码的产物。我将进程的开始移到代码的 main 部分之外,但这些进程仍然只是作为空闲进程启动并且不执行任何操作。还有其他想法吗?
-
@MisterMiyagi,请原谅我的无知,但我认为我在代码中使用的是地图功能而不是应用程序功能?我不认为我在它的任何地方使用 apply 。你能详细说明一下吗?
-
对不起,我看错了。
map_async很好。 -
我打错了,ms-windows 进程应该只在内部
__main__启动。这与在 ms-windows 上实现多处理的方式有关。
标签: python python-3.x windows jupyter-notebook python-multiprocessing