POST 패킷을 처리하는 Python 서버를 설정하려고합니다. 패킷이 도착하면 do_POST는 새 스레드를 & 데이터, 일부로 채우고 스레드는 일부 물건을 수행하고 출력을받은 자체 개체를 넣습니다.다중 스레드 응답 핸들러가있는 Python http 서버
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
....
class httpHandler(BaseHTTPRequestHandler):
def do_POST(self):
length = int(self.headers['content-length'])
data = self.rfile.read(length)
Resolver(self,data).start()
return
그런 다음 내 해결 클래스에서 내가 할 : 이 내가 지금까지 무엇을 가지고 물론
class Resolver(threading.Thread):
def __init__(self,http,number):
threading.Thread.__init__(self)
self.http = http
self.number = number + "!"
def run(self):
self.http.send_response(200)
self.http.send_header('Content-type','text/html')
self.http.send_header('Content-length', len(self.number))
self.http.end_headers()
# Send the html message
self.http.wfile.write(self.number)
return
스레딩 수입이 나는 ', 예를 들어이 아니라 전체 시트입니다 여전히 내 프로그램을 테스트하는 단계에 있습니다. 약한 플랫폼 (현재는 라즈베리 파이)에서 실행되며 좋은 성능 솔루션을 찾고 있습니다. 제안 사항이 있으십니까?
연결 당 스레드 대신 요청 당 스레드가 필요합니다 (수동으로 구현하는 대신 내장 된 TheadingMixIn을 사용할 수 있음)? – abarnert
글쎄요, 큰 범위는 다음과 같습니다. 연결을 실행하는 내 메인 클래스는 db 연결 (pycopg2 모듈 사용)을 유지하고 새로운 포스트 패킷이 도착할 때마다 커서를받습니다. 그런 다음 요청이 분석되고 출력이 응답 패킷으로 반환됩니다. ThreadingMixIn이 매우 느린 곳을 읽었습니다. 그래서 나는 그것을 의지하기를 두려워했다. 틀 렸으면 고쳐줘.각각의 연결은 보통 매우 짧습니다 : 요청, 결과 얻기 및 완료 – buddy123
파이썬에서 다중 쓰레드를 사용하는 것은 일반적으로 일반적으로 좋지 않습니다. 그러나 스레드의 목적이 데이터베이스 연결과 대화하는 것이면 적어도 각 요청 처리기가 데이터베이스와 통신하는 동안 다른 스레드를 실행할 수 있어야합니다. 직접 작성하려고 시도해도 더 빨리 처리 할 수는 없습니다./ – Iguananaut