2010-10-12 2 views
5

저는 현재 연습용으로 클라이언트 서버 응용 프로그램을 작성하고 있으며 지금까지 작업 할 수있는 모든 것을 얻었지만 아직까지는 할 수 없었던 정신 장애물이 있습니다. 성공적으로 구글 자신을 통해.Python 스레딩 개념 질문

서버 응용 프로그램에서 패킷 처리기와 데이터베이스 처리기를 스레딩하여 스택에서 작동시키는 것이 올바른 일이라고 생각합니까? 아이디어는 하나의 스레드가 패킷을 수신 대기하고 스택에 데이터를 추가 한 다음 다른 스레드가 스택의 맨 아래에서 데이터를 팝하고 SQL db에 대해 몇 가지 검사를 수행한다는 아이디어입니다.

이 특별한 경우 패킷 처리기가 계속 작동하는 것이 더 중요합니다. 내 질문에,이 스레드의 적절한 사용 및 스레드 잠금을 요구하는 문제가 어디로가는거야, 예를 들어, 패킷 스레드가 스택 시도에 문제를 피하기 위해 추가 할 때 db 처리기를 잠 가야합니다. 쓰기 및 읽기, 스택의 유일한 값 등.

모두에게 감사드립니다!

여기에 코드가 있습니다. 코드가 너무 진행 중이므로 판단하지 마세요. 파이썬 (python)에 대한 첫 번째 시도 (필자는 현재 perl이나 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() 

답변

4

이것은 queues을위한 것입니다. stack을 queue와 no로 바꾸면 다른 동기화 방법을 사용할 필요가 없습니다. 말하자면 멀티 프로세싱은 스레딩보다 낫습니다. 멀티 코어/하이퍼 스레딩 프로세서를 활용할 수 있기 때문입니다. 인터페이스는 꽤 유사하므로 스위치를 조사 할 가치가 있습니다.

+0

아니요 완벽하지 않습니다. 내가 모두 엉망이되어야합니다, 스레딩 멀티 프로세싱되지 않습니다? 그리고 내가 여기에 스레드를 가지고 있거나 다른 모듈로 전환 한 현재의 설정으로 큐를 사용한다는 것을 의미합니까? – Melignus

+0

스레딩은 일반적으로 동일한 CPU에서 프로세스를 동시에 실행합니다. 다중 처리는 여러 CPU간에 작업을 동시에 배포하는 프로세스를 실행합니다. 비슷하면서도 뚜렷합니다. – jathanism

+0

예, 멀티 프로세싱 모듈 문서 페이지를 발견했습니다. 좋은 물건과 나는 완전하게 이해한다. 인터프리터가 코어에 스레드를 전달하는 경우가있을 수 있다고 생각 했었는데, 그것이 좋았던 생각 일뿐입니다. 다중 처리 모듈은 의미가 있습니다. 도움을 주신 분들께 감사 드리며 빠른 답변을드립니다. – Melignus