首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的多处理或多线程下载文件

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

Stack Overflow用户
提问于 2018-12-20 12:07:04
回答 1查看 1.2K关注 0票数 1

我有一个csv文件,其中包含我希望从提供商那里拉出的符号列表(大约6000个)。下载整个符号列表并将其保存到csv几乎需要3个小时。下载每个符号大约需要3-4秒。

我想知道,是否有可能/更快地使用多进程/超线程来加速这个过程?

应用多进程或多线程来加速进程的正确方法是什么?

代码语言:javascript
复制
 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)

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-21 11:50:55

经过一些研究,我认为这是最好的方法:

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53862286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档