3

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ソースコードを読むのが苦手ですが、そのような振る舞いの理由はここにあります

4

2 に答える 2

2

UNIX シグナルは基本的に信頼できません。腹切モードには「ユーザーレベル」の対応があります。

uwsgi.set_user_harakiri(10)
with closing(urllib2.urlopen(request, timeout=1)) as f:
    content = f.read()
uwsgi.set_user_harakiri(0)
于 2013-03-26T07:33:46.390 に答える