2010-10-12 34 views
5

Şu anda bir istemci sunucu uygulamasını bir egzersiz olarak yazma aşamasındayım ve şu ana kadar çalışmam için hemen hemen her şeyi aldım, ancak yapabilemediğim zihinsel bir engel var. başarıyla kendim google.Python Threading Concept Soru

Sunucu uygulamasında, paket işleyicisini ve veritabanı işleyicisini bir yığından çalışmaya başlatan iş parçacığının doğru şey yapması gerektiğini düşünüyorum. Buradaki fikir, bir iş parçacığının paketleri dinlemesini ve veriyi bir yığına eklediğini ve diğer iş parçacığının veriyi yığının altından çıkardığını ve SQL db'ye karşı bazı denetimler yaptıklarını düşünmesidir.

Bu özel durumda, paket işleyicinin çalışmaya devam etmesi daha önemlidir. Sanırım sorum şu ki, bu uygun bir iş parçacığı ve iş parçacığı kilitleme gerektiren sorunlara gidiyorum, örneğin, paket iş parçacığı çalışırken bir sorundan kaçınmak için yığına eklediğinde db işleyicisini kilitlemeliyim yazmak ve okumak için, yığıntaki tek değer, vs.

Herkese teşekkürler!

İşte kodun bir pasajı, devam edeceğinize dikkat edin, bu yüzden yargılama yapmayın, aynı zamanda python'daki ilk denemem (şu anda perl veya php'den daha fazla keyif alıyorum!).

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

cevap

4

queues budur. Yığını sıra ile değiştirin ve hayır, başka bir senkronizasyon yöntemi kullanmanız gerekmeyecek. Bu arada, çok işlemcili, çok çekirdekli/hiper iş parçacıklı işlemcilerden faydalanabileceğinden, işlemciden daha iyidir. Arayüzler oldukça benzerdir, bu yüzden değişime bakmaya değer.

+0

Hayır, bu mükemmel! Yine de berbat olmalıyım, çok işlemcili değil mi? Ve iş parçacığı ile burada mevcut ayar ile bir kuyruk kullanmak veya farklı bir modüle geçmek demek? – Melignus

+0

Threading, işlemleri aynı anda, genellikle aynı CPU üzerinde yürütmektedir. Çoklu işlem, işi çoklu CPU'lar arasında eşzamanlı olarak dağıtan süreçleri çalıştırıyor. Benzer, ancak farklı. – jathanism

+0

Gotcha, evet, şimdi çok işlemcili modüllerin sayfasını buldum. İyi şeyler ve tamamen anlıyorum. Tercümanların eğer varsa dişleri çekirdeklere geçirdiği bir şey olabileceğini düşünüyordum, ama sanırım bu sadece arzulu bir düşüncedir. Çok işlemcili bir modül mantıklı. Yardım eden çocuklar ve hızlı cevaplar için teşekkürler, harikasın! – Melignus