He Django ejecuta a través de WSGI como esto:cómo dejar de WSGI de colgar Apache
<VirtualHost *:80>
WSGIScriptAlias//home/ptarjan/django/django.wsgi
WSGIDaemonProcess ptarjan processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup ptarjan
Alias /media /home/ptarjan/django/mysite/media/
</VirtualHost>
Pero si en Python que hago:
def handler(request) :
data = urllib2.urlopen("http://example.com/really/unresponsive/url").read()
el conjunto se bloquea el servidor Apache y hasta ahora no responde con este backtrace
#0 0x00007ffe3602a570 in __read_nocancel() from /lib/libpthread.so.0
#1 0x00007ffe36251d1c in apr_file_read() from /usr/lib/libapr-1.so.0
#2 0x00007ffe364778b5 in ??() from /usr/lib/libaprutil-1.so.0
#3 0x0000000000440ec2 in ??()
#4 0x00000000004412ae in ap_scan_script_header_err_core()
#5 0x00007ffe2a2fe512 in ??() from /usr/lib/apache2/modules/mod_wsgi.so
#6 0x00007ffe2a2f9bdd in ??() from /usr/lib/apache2/modules/mod_wsgi.so
#7 0x000000000043b623 in ap_run_handler()
#8 0x000000000043eb4f in ap_invoke_handler()
#9 0x000000000044bbd8 in ap_process_request()
#10 0x0000000000448cd8 in ??()
#11 0x0000000000442a13 in ap_run_process_connection()
#12 0x000000000045017d in ??()
#13 0x00000000004504d4 in ??()
#14 0x00000000004510f6 in ap_mpm_run()
#15 0x0000000000428425 in main()
en Debian Apache 2.2.11-7.
Del mismo modo, podemos estar protegidos contra:
def handler(request) :
while (1) :
pass
En PHP, me gustaría establecer límites de tiempo y memoria.
Entonces, ¿no hay forma de que python se ejecute de manera robusta? Sí ... Parece que debería presentar una solicitud de función mod_wsgi. –
No tiene sentido pedir una solicitud de función mod_wsgi. La incapacidad de interrumpir un hilo que maneja una solicitud es una limitación de Python. –
¿No tiene http://docs.python.org/library/thread.html#thread.interrupt_main la capacidad de interrumpir un hilo? ¿O me estoy perdiendo algo? –