Python - 如何捕获gevent套接字超时异常

标签 python sockets gevent

import gevent.monkey
gevent.monkey.patch_socket()
import requests
from gevent.pool import Pool
import socket

urls = ["http://www.iraniansingles.com"]


def check_urls(urls):
    pool = Pool(1)
    for url in urls:
        pool.spawn(fetch, url)
    pool.join()

def fetch(url):
    print url
    try:
        resp = requests.get(url, verify=False, timeout=5.0)
        print resp.status_code
    except socket.timeout:
        print "SocketTimeout"

check_urls(urls)

如果我删除前 2 行,我的程序将打印 SocketTimeout。但是使用 monkeypatch,我的程序会永远等待。

谁能告诉我如何使用 monkeypatch 捕获套接字超时异常?

最佳答案

问题是 gevent 默认超时设置为 None。所以我们必须手动设置默认套接字超时。

from gevent import socket
socket.setdefaulttimeout(5)

关于Python - 如何捕获gevent套接字超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23768896/

相关文章:

c - libuv : src port of response not same as port on which process is listening

python - 比较 Gevent 线程的结果

python 3 : Looking for alternatives to gevent and pylibmc/python-memcached

php - 从 PHP 调用时 pip 包导入失败

python - 如何将列表中的公共(public)元素合并到列表中?

Java Socket Server 在读取数据时挂起

java - 如何将 tcp 套接字上的 java byte[] 发送到服务器上的 c++ char[]?

python - 如何为 greenlet 指定名称

python - 在 Spring 布局+网络中更改节点的颜色

python 3.7 : Hashing a binary file