我有一个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)谢谢!!
发布于 2018-12-21 11:50:55
经过一些研究,我认为这是最好的方法:
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个小时,使用multiprocessing.Pool需要35 - 40分钟!它创建了10个python进程,并并行处理函数,没有数据丢失或损坏。唯一的缺点是,如果这需要比可用内存更多的内存,那么您将获得一个MemoryError。
https://stackoverflow.com/questions/53862286
复制相似问题