2012-01-05 51 views
0

我試圖製作一個搜索引擎,在網絡上運行。所以我使用mod_wsgi從python獲取網頁的查詢。然後,我使用zeromq將查詢發送給C++搜索程序。mod_wsgi和zeromq錯誤(python)

但問題是,它似乎zeromq和mod_wsgi不能一起工作。 這肯定是真的,蟒蛇可以導入ZMQ(我測試了它),但是當它運行在網絡上,它顯示錯誤消息(實際上是從Apache的錯誤日誌)

File "D:/wsgi_app/wsgi_app.py", line 2, in <module>, referer: http://localhost/ 
     import zmq, referer: http://localhost/ 

File "D:\\util\\Python27\\lib\\site-packages\\zmq\\__init__.py", line 35, in <module>, 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/ 

我不知道爲什麼WSGI不能導入zmq。順便說下源是完整的Python代碼

from cgi import parse_qs, escape 
import zmq 
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] 

回答

0

在你的WSGI腳本中,明確地添加你的依賴性的位置:

import site 
site.addsitedir(path_to_zeromq) 
+0

我這樣做,但它並沒有解決到問題.. – Jaebum 2012-01-06 01:10:21

+0

進口網站 site.addsitedir(「D:\\ util \\ Python27 \\ Lib \\ site-packages \\ zmq」) 我喜歡以上 – Jaebum 2012-01-06 01:11:41

+0

將zmq從您正在使用的路徑末尾 – 2012-01-06 15:51:40