¿Por qué una tarea en segundo plano bloquea la respuesta en SimpleHTTPServer?

Estoy escribiendo un front-end simple basado en un navegador que debería poder iniciar una tarea en segundo plano y luego progresar. Quiero que el navegador reciba una respuesta que indique si la tarea se inició correctamente y luego sondee para determinar cuándo se realiza. Sin embargo, la presencia de una tarea en segundo plano parece estar impidiendo que la respuesta XMLHttpRequest se envíe de inmediato, por lo que no puedo informar el éxito del inicio del proceso. Considere el siguiente código (simplificado):

import SocketServer
import SimpleHTTPServer
import multiprocessing
import time

class MyProc(multiprocessing.Process):
    def run(self):
        print 'Starting long process..'
        for i in range(100): time.sleep(1)
        print 'Done long process'

class Page(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            print >>self.wfile, "<html><body><a href='/run'>Run</a></body></html>"
        if self.path == '/run':
            self.proc = MyProc()
            print 'Starting..'
            self.proc.start()
            print 'After start.'
            print >>self.wfile, "Process started."

httpd = SocketServer.TCPServer(('', 8000), Page)
httpd.serve_forever()

Cuando ejecuto esto y buscohttp: // localhost: 8000, Aparece un botón llamado "Ejecutar". Cuando hago clic en él, el terminal muestra:

Starting..
After start.

Sin embargo, la vista del navegador no cambia ... de hecho, el cursor está girando. Solo cuando presiono Ctrl-C en el terminal para interrumpir el programa, el navegador se actualiza con el mensajeProcess started.

El mensajeAfter start Está claramente siendo impreso. Por lo tanto, puedo suponer quedo_GET regresa después de comenzar el proceso. Sin embargo, el navegador no obtiene una respuesta hasta después de que interrumpo el proceso de larga ejecución. Tengo que concluir que hay algo bloqueando entredo_GET y la respuesta que se envía, que está dentroSimpleHTTPServer.

También probé esto con subprocesos y subprocesos. Abre pero encontré problemas similares. ¿Algunas ideas?

Respuestas a la pregunta(3)

Su respuesta a la pregunta