Python在for循环期间冻结

问题描述 投票:1回答:1
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()部分”上。帮助会很感激

python loops exit freeze continue
1个回答
0
投票
我猜想get_data_yahoo()可能会冻结,因为它正在向永不应答的服务器发出某种请求。它没有超时选项,因此最明显的选择是在另一个线程/进程中启动它,并在花费太长时间时终止它。您可以使用concurrent.futures。对以下代码的工作原理感到满意后,可以将sleeps_for_a_while替换为get_price_history_data,将(3, 1, 4, 0)替换为tickers
© www.soinside.com 2019 - 2024. All rights reserved.