2009-12-23 31 views
5

Python'da iş parçacığı modülünü kullanarak bir kerede 2 sunucu çalıştırmam gerekiyor, ancak işlev çalıştırmasını çağırmak için(), ilk sunucu çalışıyor, ancak ikinci sunucu ilk sunucunun sonuna kadar çalışmıyor. Python'da 2 sunucuyu aynı anda nasıl çalıştırabilirim?

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()] 

Sunucu sınıf aramak

, otomatik döngü sırasında sonsuz çalıştırır:
Bu kaynak kodudur.
Peki, aynı anda 2 sunucuyu nasıl çalıştırabilirim?


Yardımlarınız için çok teşekkür ederim Fragsworth, Yeni yapıyı test ediyorum ve mükemmel çalışıyor. MainServer ve DownloadServer sınıfları, threading'den devralınacak. Çalıştırın ve run() içindeki sonsuz döngüyü çalıştırın. Sonunda söylediğin gibi sunucuları aradım.

cevap

6

__init__ işlevinde join()'u istemezsiniz. Bu, her bir iplik bitene kadar sistemin engellenmesine neden olur.

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

, sizin MainServer ve DownloadServer için ayrı iplik sınıf oluşturmak, sonra da bunları ana gelen uyumsuz başlamasını:

Ben senin ana işlevi görünmesi için aşağıdaki fazlası gibi programınızı yeniden öneriyoruz işlem ve daha sonra katılın.

İlgili konular