2010-10-12 12 views
5

Jestem obecnie w trakcie pisania aplikacji serwera klienta jako ćwiczenia i mam już prawie wszystko do pracy, ale istnieje mentalna przeszkoda, której nie byłem w stanie skutecznie sam google.Python Threading Concept Question

W aplikacji serwera mam rację, myśląc, że wątek obsługi pakietu i obsługi bazy danych do pracy ze stosu jest właściwy? Chodzi o to, że jeden wątek zapętla nasłuchiwanie dla pakietów i dodaje dane do stosu, a następnie drugi wątek wyskakuje dane z dołu stosu i wykonuje pewne kontrole względem bazy danych SQL.

W tym szczególnym przypadku ważniejsze jest, aby program obsługi pakietów nadal działał. Domyślam się, że moje pytanie brzmi: czy jest to odpowiednie użycie wątków i gdzie mam napotkać problemy, które wymagają blokowania wątków, na przykład, powinienem zablokować program obsługi db, gdy wątek pakietu dodaje się do stosu, aby uniknąć problemu z próbowaniem pisać i czytać powiedzieć, jedyna wartość w stosie, itp.

Dziękuję wszystkim!

Oto fragment kodu, pamiętaj, że jest w toku, więc nie osądzaj, także moja pierwsza próba w Pythonie (które w tej chwili cieszę się bardziej niż perl lub php!).

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

Odpowiedz

4

Oto, do czego służą queues. Zastąp stos kolejką i nie, nie będziesz musiał używać żadnych innych metod synchronizacji. Nawiasem mówiąc, wieloprocesorowość jest lepsza niż gwintowanie, ponieważ może korzystać z procesorów wielordzeniowych/z procesorem hiperwątkowym. Interfejsy są dość podobne, więc warto się zastanowić nad przełączaniem.

+0

Nie, to jest idealne! Muszę jednak wszystko popsuć, czy nie toczę wieloprocesorowość? Czy masz na myśli wykorzystanie kolejki z bieżącą konfiguracją, którą mam tutaj z wątkami, czy przejście na inny moduł? – Melignus

+0

Nawlekanie działa równolegle, zwykle na tym samym procesorze. Wieloprocesorowość polega na uruchomieniu procesów równoczesnej dystrybucji pracy pomiędzy wieloma procesorami. Podobne, ale wyraźne. – jathanism

+0

Mam, tak, znalazłem stronę dokumentacji modułu wieloprocesowego właśnie teraz. Dobre rzeczy i całkowicie rozumiem. Sądzę, że domyśliłem się, że mogło być coś, co tłumacz przepuszcza nitki do rdzenia, jeśli są obecne, ale myślę, że to tylko pobożne życzenie. Moduł wieloprocesowy ma sens. Dzięki za pomoc i szybkie odpowiedzi, jesteś niesamowity! – Melignus