如何为Python的mechanize设置超时值?

15 投票
3 回答
10155 浏览
提问于 2025-04-16 03:12

我该如何为Python的mechanize设置超时时间?

3 个回答

1

我认为像下面这样的代码

mechanize._sockettimeout._GLOBAL_DEFAULT_TIMEOUT = 100

会覆盖Mechanize默认使用的值。

3

如果你使用的是Python 2.6或更高版本,并且相应更新了mechanize库,那么mechanize.urlopen这个函数应该可以接受一个叫timeout=...的可选参数,这正是你需要的功能。

13

Alex说得对:mechanize.urlopen这个函数可以接受一个timeout参数。所以,你只需要在里面填一个数字,表示超时时间,单位是秒,可以用小数,比如:mechanize.urlopen('http://url/', timeout=30.0)

这里有个背景知识,来自于mechanize.urlopen的源代码:

def urlopen(url, data=None, timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):
    ...
    return _opener.open(url, data, timeout)

你可能会问,mechanize._sockettimeout._GLOBAL_DEFAULT_TIMEOUT是什么?其实它就是socket模块的一个设置。

import socket

try:
    _GLOBAL_DEFAULT_TIMEOUT = socket._GLOBAL_DEFAULT_TIMEOUT
except AttributeError:
    _GLOBAL_DEFAULT_TIMEOUT = object()

撰写回答