def get_price_history_data(ticker):
pricelist = []
try:
pricedata = False
tradingdays = 252
Historical_Prices = pdr.get_data_yahoo(symbols=ticker, start=(datetime.today()-timedelta(tradingdays)), end=(datetime.today()))#-timedelta(years4-1)))
price_df = pd.DataFrame(Historical_Prices)
pricelist = price_df['Adj Close']
pricedata = True
except:
print(ticker,' failed to get price data')
return(pricelist, pricedata)
tickers = ['FB','V']
for ticker in tickers:
[pricelist, pricedata] = get_price_data(ticker)
我有一个通过此for循环运行的数千行情清单。它输出一个单列df和一个布尔值。总的来说,它工作得很好,并且可以满足我的需要。但是,它不一致地无限期地冻结,没有错误消息,并且停止运行,迫使我关闭程序并从头开始运行。我正在寻找一种方法,如果经过一定时间,则可以跳过for循环的迭代。我已经研究了time.sleep()和continue函数,但无法弄清楚如何将其应用于此特定应用程序。如果冻结,则冻结在“ pdr.get_data_yahoo()部分”上。帮助会很感激
get_data_yahoo()
可能会冻结,因为它正在向永不应答的服务器发出某种请求。它没有超时选项,因此最明显的选择是在另一个线程/进程中启动它,并在花费太长时间时终止它。您可以使用concurrent.futures
。对以下代码的工作原理感到满意后,可以将sleeps_for_a_while
替换为get_price_history_data
,将(3, 1, 4, 0)
替换为tickers
。