Я запускаю django с сервером uwsgi. Мой код содержит много вызовов API с urllib2, например:
with closing(urllib2.urlopen(request, timeout=1)) as f:
content = f.read()
Даже когда я устанавливаю время ожидания сокета, я вижу, что запрос занимает больше секунд, чем мне хотелось бы. Я предполагаю, что это происходит потому, что тайм-аут ограничивает подключение к сокету, но не чтение данных.
И я хочу ограничить этот блок кода. Пытался добиться этого с помощью signal.SIGALRM
, но это не работает с uwsgi (я запускаю без enable-threads
). Но это работает с Apache+mod_wsgi. Тайм-аут потока выглядит ненадежным.
Никаких ошибок, SIGALRM просто игнорируется либо в режиме харакири, либо нет. Я плохо читаю исходный код C, но причина такого поведения здесь.