如何在Python中不使用requests,多线程加速fundamentalanalysis的API调用?
解决方案
可以用Python的concurrent.futures.ThreadPoolExecutor实现多线程请求,API调用属于IO密集型任务,多线程能有效减少等待时间,同时完全保留fundamentalanalysis模块的使用。
代码示例
from ApiStuff import ApiStuff import fundamentalanalysis as fa import pickle from concurrent.futures import ThreadPoolExecutor, as_completed # 加载标普500代码 tickers = pickle.load(open('S&P500_TICKERS.dat', 'rb')) api_key = ApiStuff.api_key data_from_tickers = [] # 定义单个ticker的处理函数 def fetch_balance_sheet(ticker): try: return fa.balance_sheet_statement(ticker, api_key, period="annual") except Exception as e: print(f"获取{ticker}数据失败: {str(e)}") return None # 线程池并发请求,建议根据API速率限制调整max_workers with ThreadPoolExecutor(max_workers=10) as executor: # 提交所有任务 futures = {executor.submit(fetch_balance_sheet, ticker): ticker for ticker in tickers} # 处理返回结果 for future in as_completed(futures): result = future.result() if result is not None: data_from_tickers.append(result)
关键注意事项
- API速率限制:先确认你使用的API的请求频率限制,调整
max_workers的数值(比如API限制每秒5次请求,就将max_workers设为5左右),避免触发限流或账号封禁。 - 异常处理:必须为单个请求添加异常捕获,防止某一个ticker请求失败导致整个程序崩溃。
- 多线程优先级:因为是IO密集型任务,多线程的资源开销远低于多进程,足够满足加速需求,无需使用多进程方案。
内容的提问来源于stack exchange,提问作者MEEP
相关产品推荐
相关产品推荐

