什么导致python套接字超时
我有一个在Linux(Raspbian)上运行的简单Python代码,并使用什么导致python套接字超时,python,sockets,python-3.x,urllib,Python,Sockets,Python 3.x,Urllib,我有一个在Linux(Raspbian)上运行的简单Python代码,并使用urlopen(基本上这是使用Pythonsocket)连接到服务器: 从 timeout=None将在blocking模式下运行这不是我想要的,因为如果我没有internet连接,它将永远挂起 timeout=0将在非阻塞模式下运行,但使用它,我会得到错误115(操作正在进行) timeout=20将在timeout模式下运行,阻塞20秒,如果无法创建连接则转义 我的问题是: 为什么非阻塞模式总是失败?(这可能是一
urlopen
(基本上这是使用Pythonsocket
)连接到服务器:
从
将在timeout=None
模式下运行这不是我想要的,因为如果我没有internet连接,它将永远挂起blocking
将在timeout=0
模式下运行,但使用它,我会得到错误115(操作正在进行)非阻塞
将在timeout=20
模式下运行,阻塞20秒,如果无法创建连接则转义timeout
非阻塞
模式总是失败?(这可能是一种误解,但我认为它有时应该有效,而不是总是失败)urlopen
将在1-2秒内执行,20%超时)不阻止联系远程站点?我想说,这注定会失败。你自己说过,该网站有时需要20秒以上才能回复。@Jean-Françoisfare我不知道该网站是否是延迟的原因。我怎样才能证实这个假设呢?我想说,连接打开时不阻塞是不现实的。例如,如果您正在读取一个消息队列,而该队列中已经发布了一条消息,则非阻塞是有效的。但是如果它是空的,它会立即退出。我理解你的立场,但是:为什么网站不立即接受连接?为什么有时候需要20秒?这正常/现实吗?与问题没有严格的关系,但您确实不应该使用
try/bare,除非使用,尤其是在调试时(但实际上在任何生产代码中)。通过使用bare,除非您丢弃了解释器提供的所有信息,这些信息可能有助于调试…无阻塞地联系远程站点?我想说,这注定会失败。你自己说过,该网站有时需要20秒以上才能回复。@Jean-Françoisfare我不知道该网站是否是延迟的原因。我怎样才能证实这个假设呢?我想说,连接打开时不阻塞是不现实的。例如,如果您正在读取一个消息队列,而该队列中已经发布了一条消息,则非阻塞是有效的。但是如果它是空的,它会立即退出。我理解你的立场,但是:为什么网站不立即接受连接?为什么有时候需要20秒?这正常/现实吗?与问题没有严格的关系,但您确实不应该使用try/bare,除非使用,尤其是在调试时(但实际上在任何生产代码中)。通过使用bare except,您丢弃了解释器提供的可能有助于调试的所有信息。。。
req = urllib.request.Request('myServer', data = params, headers = head)
try:
response = urllib.request.urlopen(req, timeout = 20)
except: