2010-10-12 48 views
5

Tôi hiện đang trong quá trình viết ứng dụng máy chủ của khách hàng làm bài tập và tôi đã nhận được khá nhiều thứ để làm việc cho đến nay, nhưng có một trở ngại về tinh thần mà tôi không thể thành công google bản thân mình hơn.Câu hỏi khái niệm về Python Threading

Trong ứng dụng máy chủ, tôi có đúng trong suy nghĩ của mình rằng việc xử lý gói và xử lý cơ sở dữ liệu để làm việc từ ngăn xếp là điều đúng đắn cần làm không? Ý tưởng là một vòng lặp luồng lắng nghe các gói dữ liệu và thêm dữ liệu vào một ngăn xếp và sau đó luồng khác bật dữ liệu ra khỏi ngăn xếp và thực hiện một số kiểm tra đối với một db SQL.

Trong trường hợp cụ thể này, điều quan trọng hơn đối với trình xử lý gói để tiếp tục hoạt động. Tôi đoán câu hỏi của tôi là, đây có phải là một cách sử dụng thích hợp các chủ đề và tôi sẽ chạy vào các vấn đề yêu cầu khóa luồng, ví dụ, tôi có nên khóa trình xử lý db khi chuỗi gói thêm vào ngăn xếp để tránh sự cố khi thử để viết và đọc nói, giá trị duy nhất trong ngăn xếp, v.v.

Cảm ơn mọi người!

Dưới đây là một đoạn mã, hãy nhớ rằng bạn đang tiến hành để không phán xét, cũng là nỗ lực đầu tiên của tôi tại python (mà tôi đang thưởng thức nhiều hơn perl hoặc php tại thời điểm này).

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

Trả lời

4

Đây là những gì queues cho. Thay thế stack bằng hàng đợi và không, bạn sẽ không phải sử dụng bất kỳ phương thức đồng bộ nào khác. Ngẫu nhiên, đa xử lý là tốt hơn so với luồng, vì nó có thể tận dụng lợi thế của bộ xử lý đa lõi/hyperthreaded. Các giao diện là khá giống nhau, vì vậy nó có giá trị xem xét chuyển đổi.

+0

Không hoàn hảo! Tôi phải được tất cả các messed lên mặc dù, không phải là luồng đa xử lý? Và bạn có nghĩa là sử dụng một hàng đợi với các thiết lập hiện tại tôi có ở đây với các chủ đề hoặc chuyển sang một mô-đun khác nhau? – Melignus

+0

Luồng đang chạy đồng thời, thường trên cùng một CPU. Đa xử lý đang chạy các tiến trình đồng thời phân phối công việc giữa nhiều CPU. Tương tự, nhưng khác biệt. – jathanism

+0

OK, vâng tôi đã tìm thấy trang tài liệu mô-đun đa xử lý ngay bây giờ. Thứ tốt và tôi hoàn toàn hiểu. Tôi đoán tôi đã tìm ra rằng có thể có một thứ gì đó mà người thông dịch chuyển chủ đề sang lõi nếu họ có mặt, nhưng tôi đoán đó chỉ là suy nghĩ mơ hồ. Mô-đun đa xử lý có ý nghĩa. Cảm ơn những người giúp đỡ và phản hồi nhanh, bạn thật tuyệt vời! – Melignus

Các vấn đề liên quan