Python infinite while 循环在按下 ctrl-c 之前不会暂停

Python infinite while loop pauses when it shouldn't until ctrl-c is pressed

提问人:nxl10 提问时间:11/20/2020 最后编辑:nxl10 更新时间:9/18/2022 访问量:355

问:

我有一个 python while-loop,它每分钟将石油期货数据发布到 Heroku 服务器上运行的 API。 while循环设置为无限运行。它运行了几个小时,直到在某个时候,它只是停止(这个停止点不会在程序启动后的特定时间范围内发生)。当我说停止时,我并不意味着代码被退出或抛出错误。它只是坐着,不打印任何输出,直到我按 CTRL-C,它将继续正常运行。代码正在 AWS 服务器上运行,我没有在本地计算机上遇到同样的问题。

请参阅下面的代码:

def data_reader():

    while True:
        time_start = time.time()
        try:
            source = requests.get(url, headers=headers, timeout=5)

            source.encoding = 'utf-8' 
            status = source.status_code
            source = source.text
            soup =  BeautifulSoup(source, 'lxml')
            divs = soup.find("div", {"id": "quotes_summary_current_data"})
            price = divs.find('span').text
            price = price.strip("'")
            price = float(price)
            now = (datetime.now()).strftime(timeformat)
            print(now)
            print(price)

            data_obj = {'time': now, 'close': price}


        except Exception as e:
            print(str(e))
            now = (datetime.now()).strftime(timeformat)
            data_obj = {'time': now, 'close': 'NaN'}

        response = requests.post(base, data=data_obj)
        print(response.text)

     
        time.sleep(60)
        

if __name__ == '__main__':
    data_reader()

我还尝试删除/更改requests.get()中的timeout参数,但无济于事。

我最初的直觉是,其他一些进程正在被打开,必须被杀死,直到它可以继续,但我不知道为什么/在哪里会发生这种情况。

python while循环

评论

1赞 Barmar 11/20/2020
最有可能的是,或者正在挂起,等待服务器的响应。尝试在每个调用之前和之后放置打印调用,看看它卡在哪里。requests.getrequests.post
0赞 apnorton 11/20/2020
如果放任不管,它会自我复活吗?(例如,/在无响应的服务器上等待时挂起 5 分钟,然后在 5 分钟结束时取消挂起)如果没有,可能值得在点击 ctrl+C 之前/之后做一个进程列表,看看是否有任何变化requests.postrequests.get
4赞 tdelaney 11/20/2020
当您 ctrl-c 时,您是否从例外子句中得到打印?如果是这样,请尝试添加以找到有罪的一方。import traceback;traceback.print_exc()
0赞 Karan 11/20/2020
你能在你的?timeoutrequests.post
0赞 tdelaney 11/20/2020
这不是真正的代码(url 和 base 未定义)。有没有其他地方可能来自某个地方?

答: 暂无答案