Pregunta

Estoy trabajando en una aplicación de django y estoy usando cherrypy como servidor. Cherrypy crea un nuevo hilo para cada vista de página. Me gustaría poder acceder a todos estos subprocesos (subprocesos responsables de hablar con django) desde cualquiera de ellos. Más específicamente, me gustaría poder acceder a thread_data para cada uno de estos hilos desde cualquiera de ellos. es posible? Si es así, ¿cómo lo hago?

¿Fue útil?

Solución

El wsgiserver de CherryPy no crea un nuevo hilo para cada solicitud, usa un grupo. Cada uno de esos subprocesos de trabajo es una subclase de subprocesos. Subprocesos, por lo que todos deberían estar accesibles a través de threading.enumerate ().

Sin embargo, si estás hablando específicamente sobre cherrypy.thread_data, eso es otra cosa: un threading.local. Si está utilizando una versión reciente de Python, entonces todo lo que está codificado en C y usted (probablemente con razón) no tiene acceso de subprocesos cruzados desde Python. Si realmente lo necesita y realmente sabe lo que está haciendo, la mejor técnica suele ser pegar una referencia adicional a esas cosas en un contenedor global al mismo tiempo que se insertan en la estructura thread_data. Recomiendo los dicts con debilidades como claves para esos contenedores globales: hay suficientes ORM de Python que los utilizan para agrupaciones de conexiones (vea mi Geniusql, por ejemplo) para que pueda aprender a implementarlos con bastante facilidad.

Otros consejos

Mi primera respuesta a una pregunta como esta no es para decirte cómo hacerlo, sino para hacer hincapié en que realmente debes reconsiderarlo antes de seguir adelante con esto. Normalmente evito los servidores web de subprocesos, a favor de soluciones multiproceso o asíncronas. Agregar comunicación explícita entre subprocesos a la mezcla solo aumenta esos temores.

Cuando se hace una pregunta como esta, hay un objetivo más profundo. Sospecho que lo que crees que resolvería la comunicación entre subprocesos puede resolverse de alguna otra forma más segura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top