我有一个csv文件,其中包含我想从提供程序中提取的符号列表(大约6000个)。下载整个符号列表并将其保存到csv大约需要3个小时。下载每个符号大约需要3-4秒。
我想知道,是否有可能/更快地使用多处理/超线程来加快此过程?
应用多进程的正确方法是什么 还是多线程来加快进程?
def f():
for ticker in tickers:
df = get_eod_data(ticker, ex,api_key='xxxxxxxxxxxxxxxxxxx')
df.columns = ['Open','High','Low','Close','Adj close','Volume']
df.to_csv('Path\\to\\file\\{}.csv'.format(ticker))
p = Pool(20)
p.map(f)
谢谢!!
答案 0 :(得分:0)
经过一些研究,我认为这是最好的选择:
x = ['1','2','3','4','5','6', ..... '3000']
def f(x):
df = get_eod_data(ticker, ex,api_key='xxxxxxxxxxxxxxxxxxx')
df.columns = ['Open','High','Low','Close','Adj close','Volume']
df.to_csv('Path\\to\\file\\{}.csv'.format(ticker))
def mp_handler_1():
p1 = multiprocessing.Pool(10)
p1.map(f, x)
if __name__ == '__main__':
mp_handler_1()
使用多处理程序从最初的3-4个小时下载所有符号开始,整个过程花费了35-40分钟!它创建了10个python进程并并行处理了该函数,没有数据丢失或损坏。唯一的缺点是,如果这需要更多的内存,那么您将收到MemoryError。