uwsgiサーバーでdjangoを実行しています。私のコードには、次のような urllib2 を使用した多くの API 呼び出しが含まれています。
with closing(urllib2.urlopen(request, timeout=1)) as f:
content = f.read()
ソケットタイムアウトを設定しても、リクエストに必要な秒数がかかることがわかります。タイムアウトによりソケット接続が制限されますが、データの読み取りは制限されないために発生すると思います。
そして、このコード ブロックを制限したいと思います。で達成しようとしましsignal.SIGALRM
たが、uwsgiでは機能しません(なしで実行しますenable-threads
)。しかし、Apache+mod_wsgi で動作します。スレッドのタイムアウトは信頼できないようです。
エラーはありません。ハラキリ モードかどうかに関係なく、SIGALRM は無視されます。私はCソースコードを読むのが苦手ですが、そのような振る舞いの理由はここにあります。