mod_wsgi 에서 zeromq 사용하기 (Python)
안녕하세요. 웹 상에서 검색 엔진을 만들려고 하는데요, 사용자가 웹 상에서 입력한 검색어를 mod_wsgi 를 통해서 python 스크립트에서 처리 한 후 zeromq 를 통해서 다시 C++ 서버에 전달하면 처리해서 출력해 주는 것으로 구상을 하였습니다.
그렇게 해서 한 번 apache 서버에 사용을 해 보았는데요, 이상하게도 dll 을 찾을 수 없다는 오류가 나네요.
오류 내용은
File "D:/wsgi_app/wsgi_app.py", line 2, in , referer: http://localhost/
import zmq, referer: http://localhost/
File "D:\\util\\Python27\\lib\\site-packages\\zmq\\__init__.py", line
35, in , referer: http://localhost/
from zmq.utils import initthreads # initialize threads,
referer: http://localhost/
ImportError: DLL load failed: \xc1\xf6\xc1\xa4\xb5\xc8
\xb8\xf0\xb5\xe2\xc0\xbb \xc3\xa3\xc0\xbb \xbc\xf6 \xbe\xf8\xbd
\xc0\xb4\xcf\xb4\xd9., referer: http://localhost/
와 같고요.. 한 가지 이상한 점은 zeromq 를 따로 사용했을 때는 잘 돌아가고 또한 wsgi 자체는 잘 실행되는 것 같습니다. 아무튼 이 두개를 같이 사용하면 문제가 생기는 것 같네요.
전체 파이선 소스는 아래과 같습니다.
from cgi import parse_qs, escape
import zmq # HERE IS THE ERROR
def application( # It accepts two arguments:
# environ points to a dictionary containing CGI like environment
variables
# which is filled by the server for each received request from
the client
environ,
# start_response is a callback function supplied by the server
# which will be used to send the HTTP status and headers to the
server
start_response):
# get a query from the webpage :)
data = parse_qs(environ['QUERY_STRING'])
query = data.get('query', [''])[0]
query = escape(query) #prevent script injection
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect ("tcp://localhost:5555") #connect to C++ search
server database
socket.send (query)
# build the response body possibly using the environ dictionary
response_body = 'The request method was %s' %
environ['REQUEST_METHOD']
# HTTP response code and message
status = '200 OK'
# These are HTTP headers expected by the client.
# They must be wrapped as a list of tupled pairs:
# [(Header name, Header value)].
response_headers = [('Content-Type', 'text/plain'),
('Content-Length', str(len(response_body)))]
# Send them to the server using the supplied function
start_response(status, response_headers)
# Return the response body.
# Notice it is wrapped in a list although it could be any iterable.
return [response_body]
아파치/mod_wsgi가 zmq 모듈 혹은 zmq가
아파치/mod_wsgi가 zmq 모듈 혹은 zmq가 참조하는 DLL을 못찾는 모양이네요. mod_wsgi 환경설정에서 PATH 혹은 PYTHONPATH를 잘 지정해주면 되지 않을까요.
아니면 위 소스 맨 위에서 sys.path를 직접 조작하시던지요.
댓글 달기