我有一个服务器,它使用请求对另一个可能正在运行或不在运行的服务器进行查询。如果服务器没有运行,我不想阻塞很长时间;我可以马上处理错误。但是,timeout参数似乎不适用于建立初始连接的过程。你知道吗
从终端,我运行:
>>> import time
>>> import requests
>>> t1 = time.time() ; exec("try: requests.get('http://192.168.99.100/', timeout=1.0)\nexcept: pass") ; t2 = time.time() ; t2 - t1
21.00611114501953
这大约需要21秒,与我给出的超时无关。我也尝试过使用eventlet's timeout,但结果是一样的:
>>> import time
>>> import eventlet
>>> requests = eventlet.import_patched('requests')
>>> t1 = time.time() ; exec("try: \n with eventlet.Timeout(1): requests.get('http://192.168.99.100/')\nexcept: pass") ; t2 = time.time() ; t2 - t1
21.00276017189026
我得到的连接错误是:
ConnectionError: ('Connection aborted.', error(11, 'Resource temporarily unavailable'))
最后,我在Windows的Linux子系统下运行python,这可能与套接字的工作方式不同。你知道吗
从文档中:
这是一个使用投票的例子。你知道吗
您可以使用任务管理器(如
celery
),然后在工作线程上设置超时。我认为requests
支持gevent
而不是eventlet
,这可能就是为什么使用eventlet
会出现同样的问题。你知道吗相关问题 更多 >
编程相关推荐