2009-12-23 43 views
5

Necesito ejecutar 2 servidores a la vez en Python usando el módulo de threading, pero para llamar a la función run(), el primer servidor se está ejecutando, pero el segundo servidor no se ejecuta hasta el final del primer servidor.
Este es el código fuente:¿Cómo puedo ejecutar 2 servidores a la vez en Python?

import os 
import sys 
import threading 

n_server = 0 
n_server_lock = threading.Lock() 

class ServersThread(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.start() 
     self.join() 

    def run(self): 
     global n_server, n_server_lock 

     if n_server == 0: 
      n_server_lock.acquire() 
      n_server += 1 
      n_server_lock.release() 

      print(['MainServer']) 

      # This is the first server class  
      main_server = MainServer() 
     elif n_server == 1: 
      n_server_lock.acquire() 
      n_server += 1 
      n_server_lock.release() 

      print (['DownloadServer']) 

      # This is the second server class 
      download_server = DownloadServer() 

if __name__ == "__main__": 
    servers = [] 

    for i in range(2): 
     servers += [ServersThread()] 

Cuando llamo a la clase de servidor, se ejecuta automáticamente un bucle while.
Entonces, ¿cómo puedo ejecutar 2 servidores a la vez?


Muchas gracias por su ayuda Fragsworth, acabo de probar la nueva estructura y el trabajo perfecto. Las clases MainServer y DownloadServer, heredan de threading.Thread y ejecutan el bucle infinito dentro de run(). Finalmente llamo a los servidores como dijiste.

Respuesta

6

No desea join() en su función __init__. Esto está causando que el sistema se bloquee hasta que cada hilo termine.

le recomiendo que reestructurar su programa por lo que su función principal parece más a lo siguiente:

if name == "__main__": 
    servers = [MainServer(), DownloadServer()] 
    for s in servers: 
     s.start() 
    for s in servers: 
     s.join()   

es decir, crear una clase de hilo separado para su MainServer y DownloadServer, a continuación, programar su inicio de forma asincrónica de la principal proceso, y únete luego.

Cuestiones relacionadas