私は、実行しているかもしれないし、していないかもしれない別のサーバーへの照会を要求するサーバーを持っています。そのサーバーが実行されていない場合、私は長い間ブロックしたくありません。私はすぐにエラーを処理することができます。ただし、timeoutパラメータは、最初の接続を確立するプロセスには適用されないようです。端末からPythonリクエストで初期接続をブロックしない方法は?
は、私が実行します。
>>> 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のタイムアウトを使用してみましたが、それは同じ判明:
>>> 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'))
、私はLinux用のWindowsサブシステムの下でのpythonを実行していますこれは、ソケットで別々に動作している可能性があります。ドキュメントから
OS Xで動作します。おそらくWindows関連の問題です。この問題を回避するには、スレッドを使用することができます。つまり、スレッド内の要求呼び出しがタイムアウト内に応答しなかった場合は、メインスレッドで続行します。 –
@ J.P.Petersen WSLはまだ動作しているので、これはおそらく手元にある問題だと思います。 – Akh