Python中文
首页
教程
问答
标签
搜索
登录
注册
中止HTTP请求交叉线程
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在从C移植我的一个项目,在Python中解决多线程问题时遇到了困难。该问题与预期的长生存期HTTP请求有关(当服务器上发生某个事件时,该请求将响应)。总结如下:</p> <p>我在一个单独的线程上使用<code>urllib2</code>发送请求。当请求返回或超时时,将通知主线程。这个很好用。但是,在某些情况下,我需要中止这个未完成的请求并切换到另一个URL。我可以考虑四种解决方案:</p> <ol> <li>中止未完成的请求。C有<code>WebRequest.Abort()</code>,我可以调用它来中止请求。Python<code>urllib2.Request</code>似乎是一个纯数据类,在这种情况下,只存储请求信息;响应不连接到请求对象。所以我不能这么做。在</li> <li>中断线程。C有<code>Thread.Interrupt()</code>,如果线程处于等待状态,或者下次进入这种状态时,它将在线程中引发一个{<cd5>}。(等待监视器和文件/套接字I/O都是等待状态)Python似乎没有任何可比性;似乎没有一种方法可以唤醒I/O阻塞的线程</li> <li>设置请求的低超时。超时时,检查“中止”标志。如果为false,请重新启动请求。在</li> <li>与选项3类似,向state对象添加一个“aborted”标志,以便当请求最终以某种方式结束时,线程知道不再需要响应,而只关闭自己。在</li> </ol> <p>选项3和选项4似乎是Python支持的唯一选项,但选项3是一个糟糕的解决方案,4将保持打开一个我不需要的连接。我希望成为一个好的网民,当我不再需要它的时候关闭这个连接。是否有任何方法可以实际中止未完成的请求,以某种方式?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>与斯派克·格罗尼姆的回答相似,但更为严厉。在</p> <p>考虑用twisted重写这个。您可能希望子类<code>twisted.web.http.HTTPClient</code>,特别是实现<code>handleResponsePart</code>来进行客户机交互(或者{<cd3>},如果您不需要在响应结束之前看到它)。要尽早关闭连接,只需调用客户端协议上的<code>loseConnection</code>方法。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
9 回答
无法使用Django\u mssql\u后端迁移到外部hos
10 回答
无法使用Django&Python3.4连接到MySql
8 回答
无法使用Django+nginx上载媒体文件
8 回答
无法使用Django1.6导入名称模式
5 回答
无法使用Django1.7和mongodb登录管理站点
2 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
5 回答
无法使用Djangockedi验证CBV中的字段
7 回答
无法使用Djangocketditor上载图像(错误400)
3 回答
无法使用Djangocron进行函数调用
5 回答
无法使用Djangofiler djang上载文件
8 回答
无法使用Djangokronos
6 回答
无法使用Djangomssql provid
1 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
8 回答
无法使用Djangomssq迁移Django数据库
1 回答
无法使用Djangonox创建用户
5 回答
无法使用Djangopyodb从Django查询SQL Server
4 回答
无法使用Djangopython3ldap连接到ldap
4 回答
无法使用Djangoredis连接到redis
6 回答
无法使用Django中的FK创建新表
10 回答