python - 中止长时间运行的 http 操作

标签 python multithreading sockets couchdb

在我的(python)代码中,我有一个线程监听来自 couchdb feed 的更改( continuous changes )。更改请求有 timeout parameter在某些情况下(例如,当用户想要使用 ^C 手动中断程序时),该值太大。

  • 如何中止长时间运行的阻塞 http 请求?
  • 这可能吗?或者我是否需要减少超时以使我的程序响应更快?

这将是不幸的,因为超时足够小以使程序真正响应(例如,1 秒),意味着创建大量连接(每秒一个!),这违背了监听更改的目的,并且很难确保我们没有错过任何更改(在重新连接的时间跨度中,我们确实可能会错过更改,因此需要特殊的代码来处理这种情况)

另一个选项是强制中止线程,但是 that is not really an option in python .

最佳答案

如果我理解正确的话,看起来您在决定是否响应用户之前在请求之间等待了太长时间。你是对的,不断地关闭和创建新的连接将违背更改源的目的。

解决方案可能是使用 heartbeat查询参数,其中 couchdb 将不断发送换行符以告诉客户端连接仍然有效。

http://localhost:5984/hello/_changes?feed=continuous&heartbeat=1000&include_docs=true

只要您收到心跳(换行符),您就可以确定您正在收到新的更改。新行将表明没有发生任何更改。实际更改将被报告回来。无需关闭连接。回复您的客户if resp!="/n"

关于python - 中止长时间运行的 http 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24547851/

相关文章:

java - java中的并发和并行之间有区别吗?

python - 在Windows上更改IP地址的脚本

python - 将 ubuntu 15.10 升级到 16.04 后 virtualenv python 崩溃了

android - 数组适配器在后台异常中修改

C/GTK 在等待线程时更新 UI

c++ - C 服务器 - "The connection was reset"

java - 如何使用类加载器从服务器加载类文件到客户端

相当于 `io.Copy` 的 Python

python regex - 找到几个可选字符分组之一

python - Osx 'which' 命令工作异常