San*_*4ez 3 python signals timeout uwsgi
我用uwsgi服务器运行django.我的代码包含许多与urllib2的api调用,如下所示:
with closing(urllib2.urlopen(request, timeout=1)) as f:
content = f.read()
Run Code Online (Sandbox Code Playgroud)
即使我设置套接字超时,我看到请求需要更多秒钟,我想.我想这是因为超时限制了套接字连接而不是数据读取.
我想限制这个代码块.试图实现它,signal.SIGALRM但它不适用于uwsgi(我没有运行enable-threads).但它适用于Apache + mod_wsgi.线程超时看起来不可靠.
没有错误,SIGALRM只是被忽略harakiri模式.我不擅长阅读C源代码,但这里有这种行为的原因.
使用线程支持编译的Python不会在其线程或fork()s中调用自定义信号处理程序,除非它PyOS_AfterFork()通常会重新初始化os.fork(),但奇怪的是uwsgi默认情况下不会这样做.但是,它提供了一个选项--py-call-osafterfork,uwsgi从属可以处理信号,包括SIGALRM.