我们可以在API Hit中实现多线程吗?

2024-06-01 09:18:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从公共资源https://fred.stlouisfed.org/categories/10/downloaddata下载我的学术作业数据

源文件中存在超过10K个系列Id,我想获取所有系列Id的数据。在https://fred.stlouisfed.org/categories/10/downloaddata/EP_csv_2.zip中可用

由于python客户端“fredapi”为每个序列id提供数据,因此获取和处理该数据至少需要2-3秒,因此存在10K+序列id。 这将需要5个多小时

我们无法在单个请求中获取多个序列Id的数据。这里有什么方法可以应用多线程吗?因此,我可以同时获取数据以减少处理时间

下面的脚本是使用For循环逐个获取数据,有没有更好的方法来减少使用multi-hit

import time
import pandas as pd
from fredapi import Fred

fred = Fred(api_key='QWERTYUIOPASDFGHJKLZXCVBNM')

Series_List = pd.read_excel(r'D:\Sunil_Work\temp8\Series_List.xlsx', sheet_name = 'Source', dtype=object)

Data_All = pd.DataFrame()
for I, Series_Id in enumerate(Series_List['Series_Id'], start=1):
    Data = None
    Started = time.time()
    while Data is None:
        try:
            Data = fred.get_series(Series_Id)
        except:
            if (time.time() - Started)/60 > 1:  # Multiple Try in 1 Minutes
                break
            Data = None
            continue

    if isinstance(Data, pd.Series):
        Data = pd.DataFrame({'Date':Data.index, 'Value':Data.values})
        Data['Series_Id'] = Series_Id
        Data_All = Data_All.append(Data, sort=False)
    else:
        print('\n>> Error, NO valid Data Retrieved')

Tags: 数据httpsorgimportnoneiddatatime