2010-10-12 16 views
5

Actualmente estoy en el proceso de escribir una aplicación de servidor cliente como ejercicio y hasta ahora he conseguido casi todo, pero hay un obstáculo mental que no he podido googlearme exitosamente.Python Threading Concept Pregunta

En la aplicación de servidor, ¿estoy en lo cierto al pensar que es lo correcto hacer el enrutamiento del manejador de paquetes y el manejador de bases de datos para trabajar desde una pila? La idea es que un hilo se repite al escuchar los paquetes y agrega los datos a una pila y luego el otro hilo saca los datos de la parte inferior de la pila y realiza algunas comprobaciones en un SQL db.

En este caso particular, es más importante que el manejador de paquetes siga trabajando. Supongo que mi pregunta es si este es un uso apropiado de subprocesos y dónde voy a encontrar problemas que requieren bloqueo de subprocesos, por ejemplo, si bloqueo el controlador de base de datos cuando el subproceso de paquete se agrega a la pila para evitar un problema al intentarlo para escribir y leer decir, el único valor en la pila, etc.

¡Gracias a todos!

Aquí hay un fragmento del código, tenga en cuenta que está en progreso, así que no lo juzgue, también es mi primer intento en Python (que estoy disfrutando más de perl o php en este momento).

class socketListen(threading.Thread): 
    def run(self): 
     while True: 
      datagram = s.recv('1024') 
      if not datagram: 
       break 
      packetArray = datagram.split(',') 
      if packetArray[0] = '31337': 
       listHandle.put(packetArray) 
     s.close() 

class stackOperations(threading.Thread): 
    def run(self): 
     while True: 
      #pull the last item off the stack and run ops on it 
      #listHandle.getLast is the last item on the queue 
    def 

class listHandle(): 
    def put(shiftData): 
     if not mainStack: 
      mainStack = [] 
     mainStack.insert(0,shiftData) 
    def getLast: 
     return mainStack.pop() 

Respuesta

4

Esto es lo que queues son para. Reemplace la pila con la cola y no, no tendrá que usar ningún otro método de sincronización. A propósito, el multiprocesamiento es mejor que el enhebrado, ya que puede aprovechar los procesadores multinúcleo/hyperthreaded. Las interfaces son bastante similares, por lo que vale la pena considerar el cambio.

+0

¡No, eso es perfecto! Sin embargo, debo estar todo en mal estado, ¿no está subprocesando multiprocesamiento? ¿Y quieres decir utilizar una cola con la configuración actual que tengo aquí con los hilos o cambiar a un módulo diferente? – Melignus

+0

Threading ejecuta procesos de forma concurrente, generalmente en la misma CPU. El multiprocesamiento es ejecutar procesos que distribuyen simultáneamente el trabajo entre varias CPU. Similar, pero distinto. – jathanism

+0

Tengo, sí, encontré la página de documentos del módulo de multiprocesamiento justo ahora. Buenas cosas y lo entiendo completamente. Supongo que estaba imaginando que podría haber algo en lo que el intérprete transfiere hilos a núcleos si están presentes, pero supongo que eso es solo una ilusión. Un módulo de multiprocesamiento tiene sentido. Gracias por la ayuda chicos y las respuestas rápidas, ¡eres increíble! – Melignus