python中的多处理或多线程下载文件

时间:2018-12-20 04:07:04

标签: python-3.x dataframe python-multiprocessing pandas-datareader

我有一个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)

谢谢!!

1 个答案:

答案 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。