2009-12-23 4 views
5

Мне нужно запустить сразу 2 сервера в Python с помощью модуля потоковой передачи, но для вызова функции run() первый сервер работает, а второй сервер не запускается до конца первого сервера.
Это исходный код:Как я могу запустить сразу 2 сервера в 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()] 

Когда я звоню класс сервера, он автоматически запускает бесконечное время цикла.
Итак, как я могу запустить сразу 2 сервера?


Большое спасибо за помощь Fragsworth, я просто испытал новую структуру и отлично работал. Классы MainServer и DownloadServer наследуют от threading.Thread и запускают бесконечный цикл внутри run(). Наконец, я называю серверы, как вы сказали.

ответ

6

Вы не хотите join() в своей функции __init__. Это заставляет систему блокироваться до тех пор, пока не закончится каждый поток.

Я бы порекомендовал вам перестроить свою программу так, ваша основная функция выглядит так:

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

То есть, создать отдельный класс резьбы для MainServer и DownloadServer, то есть они начинают асинхронно от основной процесс и присоединиться к нему.

Смежные вопросы