gpt4 book ai didi

Python Mechanize 超时问题

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:34 24 4
gpt4 key购买 nike

我正在尝试从 nydaily 新闻和其他网站获取 htmltext,但我无法让 mechanize 正确超时。当超时为 0.01 时,它会立即超时,但是当超时更合理时 (1.0),它会运行约 2 分钟,然后再给出此错误:

Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/monitor.py", line 575, in run
already_pickled=True)
File "/usr/lib/python2.7/dist-packages/spyderlib/utils/bsdsocket.py", line 24, in write_packet
sock.send(struct.pack("l", len(sent_data)) + sent_data)
error: [Errno 32] Broken pipe
import mechanize

br = mechanize.Browser()
url = 'http://www.nydailynews.com/services/feeds'
htmltext= br.open(url,timeout=1.0).read()
print htmltext[:200]

最佳答案

urllib2 的一般工作方式有些愚蠢(mechanize 使用 fork)

看看这个:

#!/usr/bin/python

import time
import urllib2
import sys

def graburl(url,timeout):
urllib2.urlopen(url, timeout=float(timeout))

for i in range(1,30):
try:
start = time.time()
graburl("http://www.cnn.com:443", i)
except:
print 'Timeout: ', i, 'Duration: ', time.time() - start

运行时:

Timeout:  1 Duration:  4.45208692551
Timeout: 2 Duration: 8.00451898575
Timeout: 3 Duration: 12.0053498745
Timeout: 4 Duration: 16.0044560432
Timeout: 5 Duration: 20.0762069225
Timeout: 6 Duration: 24.005065918

因此实际超时最终是指定超时的 4 倍。

请注意,在这种特定情况下,套接字连接成功,但无法正确读取数据。 (或者请求没有在合理的时间内得到满足...)

如果有人能提出一个很好的理由来解释为什么超时会乘以四,我会对导致这种情况的原因非常感兴趣。

在 OSX Mavericks 上使用 python 2.7.5 进行测试

使用 socket.setdefaulttimeout() 似乎并没有改变这种行为。

关于Python Mechanize 超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19598335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com