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

Multiprocessing or Multi threading in python to download files

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

谢谢!!

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

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。