如何取消正在进行的Requests.Session.Get请求?

gre*_*hat 2 python sockets python-requests

所以我有一个帮助线程,它使用https从服务器监听信息.我正在使用Python的Requests.Session并且没有超时调用get(),因为我们确实想等待一些响应.

但是,在关机时,我想很好地结束所有帮助程序线程.我不知道如何杀死线程阻塞的get请求.在*nix环境中关闭会话的底层套接字将最终抛出异常.这是一种方法来做到这一点; 关闭套接字,捕捉异常,快乐.在Windows上,这似乎不起作用.

什么是杀死/结束会话和获取请求的正确方法,以便我的帮助程序线程可以死?

澄清:我正在使用Python的Requests.Session.get().

aba*_*ert 6

在查看了我能想到的所有内容之后,看起来requests无法取消正在进行的请求而无法一直到套接字级别.并且,正如OP所指出的那样,即使这对Windows没有直接帮助,除非您实际进入底层的select-or-pool循环而不是仅关闭套接字.(如果你不关心Windows,你可以更容易地通过signal线程取消读取...)所以,这几乎是出来的.

另一种方法是杀死线程,或让操作系统为您完成.如果线程也做了其他工作......好吧,你总是可以把它拆分到不同的线程上.但这可能是对代码进行重大而无根据的重写.

所以,听起来你需要放弃requests并使用别的东西.

cURL库肯定能够取消请求.有一组正式的绑定被称为pycurl,但它的级别要低得多requests,因此您可能希望查看通过在PyPI上搜索可以找到的69105更高级别的包装器.其中一些不是非常完整/稳定/最新,所以你可能需要做一些游戏,为你找到合适的...