Python 控制外部库中的套接字超时

Python 控制外部库中的套接字超时,python,urllib2,Python,Urllib2,我正在重新开发我的个人网站,我遇到了一个小问题,我希望有一个干净的解决办法: 我正在使用各种操作系统包与StackExchange(多个站点)和Twitter(仅针对我的提要)通信。为了在刷新烧杯驱动的缓存时加快速度,我使用了一个通用的QueuedCall类(我自己设计的)对请求进行多线程处理 现在,当供应商成立时,这一切都很好。但是,如果提供者停机,它可能会挂起(这显然是我想要避免的)。不幸的是,我使用的libs没有公开设置超时的方法。在我看来,我有两个选择之一: 在指定的超时后手动终止线程。

我正在重新开发我的个人网站,我遇到了一个小问题,我希望有一个干净的解决办法:

我正在使用各种操作系统包与StackExchange(多个站点)和Twitter(仅针对我的提要)通信。为了在刷新烧杯驱动的缓存时加快速度,我使用了一个通用的
QueuedCall
类(我自己设计的)对请求进行多线程处理

现在,当供应商成立时,这一切都很好。但是,如果提供者停机,它可能会挂起(这显然是我想要避免的)。不幸的是,我使用的libs没有公开设置超时的方法。在我看来,我有两个选择之一:

  • 在指定的超时后手动终止线程。我想不惜一切代价避免这种情况,因为它很糟糕
  • 修改库以接受超时参数。我并不特别想讨论这个问题,因为这是我开始使用第三方LIB的部分原因;)
  • (希望能够)设置一些全局属性,设置在外部库中使用时,
    urlib2
    将识别的超时
  • 问题:是否可以从应用程序代码中设置某个属性来控制
    urllib2
    的默认超时?

    您在寻找什么

    socket.setdefaulttimeout
    

    我很困惑。最新的urllib2至少对urlopen支持超时()。@CarlF:是的,但我自己并没有调用
    urlopen
    ,而是在一个我不想修改的外部库中完成的。好的。我明白了。您使用的是“外部库”,您怀疑(或可能知道)它在幕后调用urllib2。如何确定用于建立连接的是urllib2,而不是urllib、httplib或套接字?我想知道@Donkopotamus是否有正确的答案。我对来源进行了分析。太棒了,正是我想要的:p这是一个出乎意料的解决方案。我不会想到在套接字包中搜索url相关的东西。你这么说很有道理。